浅谈java里的抽象类
来源:互联网 发布:linux串口应用程序 编辑:程序博客网 时间:2024/05/05 23:57
- 在java里含有抽象方法的类一定要声明为抽象类
- 抽象类的抽象方法只能声明,不需要实现也不能实现
- 继承抽象类的子类,如果子类也是抽象类,则可以不实现抽象方法,子类不是抽象类的话则必须实现抽象方法
新建一个抽象类Person
package review;public abstract class Person{ public void show() { System.out.println("调用抽象类Person的非抽象方法\n"); } public abstract void whyIsAbstract() ;}
创建一个实现了抽象类的ImplementationAbstractClass类,可以
看到ImplementationAbstractClass类不是抽象类,所以必须实现抽象方法whyIsAbstract()。如果不实现则会出错
public class ImplementationAbstractClass extends Person { public void whyIsAbstract() { System.out.println("调用ImplementationAbstractClass类实现的抽象方法whyIsAbstract()\n"); } public void show() { System.out.println("调用ImplementationAbstractClass类show()的方法\n"); }}
ImplementationAbstractClass类还重写了show()方法,
创建ImplementationAbstractClass类对象调用show()方法时,将会调用重写后的show()方法
下面创建一个继承了抽象类的NotImplemention类来验证如果不重写show()方法调用时将会调用Person类的show()方法
public class NotImplemention extends Person { public void whyIsAbstract() {}}
下文创建一个抽象类Student,继承父类Person,由于子类是抽象类,所以不实现父类的抽象方法whyIsAbstract()是允许的
package review;public abstract class Student extends Person { public void introduce() { System.out.println("我是学生类"); }}
CollegeStudent类继承了抽象类Student,抽象类Student里有未实现的抽象方法whyIsAbstract(),
所以CollegeStudent类就必须实现whyIsAbstract()方法
public class CollegeStudent extends Student { @Override public void whyIsAbstract() { System.out.println("CollegeStudent类实现了抽象类的whyIsAbstract()方法 "); }}
主函数验证如下:
package review;public class Main { public static void main(String[] args) { ImplementationAbstractClass test=new ImplementationAbstractClass(); System.out.println(test.toString()); test.whyIsAbstract(); Person one=test; System.out.println(one.toString()); one.show(); Person two=new ImplementationAbstractClass(); System.out.println(two.toString()); two.show(); Person three=new NotImplemention(); System.out.println(three.toString()); three.show(); Student student=new CollegeStudent(); student.whyIsAbstract(); student.introduce(); }}
总结:在java里含有抽象方法的类一定要用abstract关键字声明,继承了抽象类的子类如果不是抽象类,
则必须重写父类的抽象方法;子类如果重写了父类的非抽象方法,子类对象调用该方法时将调用最新的方法,即重写后的方法;
抽象类不能实例化,只能通过其子类实例化。
使用子类实例化抽象类时实质是把子类对象的指针赋给父类,即父类对象名和子类对象名指向同一个地址,上图可以证明抽象类Person对象与其子类
ImplementationAbstractClass对象test指向同一个对象id号,并且类型均为子类类型,
即通过子类实例化的父类对象所属类型依旧为子类类型。
- 浅谈java里的抽象类
- 浅谈java里的clone
- java里抽象类用法
- java里抽象类用法
- 浅谈Java接口和抽象类的区别
- 浅谈java中抽象类和接口的区别
- java 里的接口类和抽象类
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- 在Java里抽象类与接口的区别详解
- [转载]java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- java里抽象类和接口的区别
- 虚拟机安装火狐浏览器
- 设计模式系列之三观察者模式
- c语言编程题
- redis之hash
- Effective Java 2.0_中英文对照_Item 9
- 浅谈java里的抽象类
- Docker背后:使用Linux Namespaces隔离系统的原理
- Intel RealSense Camera 学习 之一 “Hello RealSense”
- 字符串数组 和 字符串指针 的区别
- PowerDesigner 转 MySQL
- 如何精选可信赖的信息源
- 优先bsf rescue
- 移植telnet服务到DM8168
- Ubuntu更新镜像源