普通类和抽象类有哪些区别?
下文笔者讲述普通类和抽象类之间的区别说明
学习完本篇之后,你将彻底掌握普通类和抽象类的区别,如下所示
学习完本篇之后,你将彻底掌握普通类和抽象类的区别,如下所示
抽象类(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 来修饰 普通类则不用。 普通类和抽象类 都可以含有普通成员属性和普通方法。 普通类和抽象类 都可以继承别的类或者被别的类继承。 普通类和抽象类的属性和方法 都可以通过子类对象来调用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。