普通类和抽象类有哪些区别?
下文笔者讲述普通类和抽象类之间的区别说明
学习完本篇之后,你将彻底掌握普通类和抽象类的区别,如下所示
学习完本篇之后,你将彻底掌握普通类和抽象类的区别,如下所示
抽象类(abstract class)简介
1.抽象类使用abstract关键字修饰
public abstract class Demo {
// 一个抽象类
}
2.使用abstract关键字修饰的方法为抽象方法
注意:
在抽象类中抽象方法可以没有具体的实现
public abstract class Demo {
// 抽象方法
public abstract void show();
}
3.在抽象类的子类中必须对抽象方法进行重写
当其子类为抽象类时
可以不重写抽象方法
但在其子类中一旦有普通类
则必须重写父类继承的所有抽象方法
如:
public abstract class Demo {
public abstract void show();
}
public abstract class Demo2 extends Demo {
public abstract void show2();
}
public class Demo3 extends Demo2 {
// 实现 Demo 的接口
public void show() {
System.out.println("show()");
}
// 实现 Demo2 的接口
public void show2() {
System.out.println("show2()");
}
}
4.抽象类不可以实例化
抽象类的构造方法作用为初始化子类对象
如:
public abstract class MyAbstract {
private String message;
public MyAbstract(String message) {
this.message = message;
}
public void show() {
System.out.println(message);
}
}
public class Demo extends MyAbstract {
public Demo(String message) {
super(message);
}
public static void main(String[] args) {
Demo demo = new Demo("Hello World");
demo.show();
}
}
5.抽象类中的普通属性和普通方法都需要用子类的对象去调用
如:
public abstract class MyAbstract {
// 抽象类中的一个普通方法
public void show(String message) {
System.out.println(message);
}
}
public class Demo extends MyAbstract {
public static void main(String[] args) {
Demo demo = new Demo();
// 调用抽象类的方法
demo.show("Hello World");
}
}
普通类(class)
1.普通类可以实例化
实例化后可以调用自己类中的属性和方法
及父类中的方法和属性
2.普通类的构造方法中必须要调用父类的构造方法
如果父类没有定义带参数构造方法
子类则不需要显示调用父类构造方法
如:
public abstract class MyAbstract {
private String message;
// 自定义无参构造方法,初始化 message 变量
public MyAbstract() {
this.message = "Hello world";
}
public void show() {
System.out.println(message);
}
}
public class Demo extends MyAbstract {
// 默认调用了父类的无参构造方法
public Demo() {}
public static void main(String[] args) {
Demo demo = new Demo();
demo.show();
}
}
3.当普通类继承抽象类
则必须要重写所有父类的抽象方法
普通类和抽象类的区别
抽象类的存在时为被继承,不能实例化 普通类存在是为实例化一个对象。 抽象类的子类必须重写抽象类中的抽象方法 普通类可以选择重写父类的方法,也可以直接调用父类的方法。 抽象类必须用abstract 来修饰 普通类则不用。 普通类和抽象类 都可以含有普通成员属性和普通方法。 普通类和抽象类 都可以继承别的类或者被别的类继承。 普通类和抽象类的属性和方法 都可以通过子类对象来调用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


