实例化抽象类
- 抽象子类在未实现抽象父类的抽象方法的情况下,需要在实例此抽象子类的时候,实现父类未实现的抽象方法,否则,无法实例;其实就相当于子类实现抽象父类,作为一个完整的类创建对象而不是抽象类。
B抽象类
public abstract class B {
private String str;
public B(String a){
System.out.println("父类已实例化");
this.str = a;
System.out.println(str);
}
public abstract void play();
}
继承B的C抽象类
public abstract class C extends B{
public C(String c){
super(c);
System.out.println("子类已被实例化");
}
@Override
public abstract void play();
}
Test类
public class Test {
public static void main(String[] args) {
C c = new C("test主方法"){
@Override
public void play(){
System.out.println("主方法内重写play方法");
}
};
c.play();
}
}
结果
[外链图片转存失败(img-sfdVyZkE-1564791888823)(C:\Users\zsj55\AppData\Roaming\Typora\typora-user-images\1564730058149.png)]
- 在子类为完整类的情况下,实例化抽象父类,需要以多态的形式实例化抽象父类,也就是抽象父类的引用指向子类对象。
B抽象类
public abstract class B {
private String str;
public B(String a){
System.out.println("父类已实例化");
this.str = a;
System.out.println(str);
}
public abstract void play();
}
C类
public class C extends B{
public C(String c){
super(c);
System.out.println("子类已被实例化");
}
@Override
public void play(){
System.out.println("在C类中重写抽象父类B的抽象方法");
}
}
Test类
public class Test {
public static void main(String[] args) {
B b = new C("抽象父类引用指向子类对象实现抽象父类实例化");
}
}
结果
[外链图片转存失败(img-EO4PY4I4-1564791888826)(C:\Users\zsj55\AppData\Roaming\Typora\typora-user-images\1564730946695.png)]
抽象父类引用指向子类对象内存分析
抽象父类引用指向子类对象实现抽象父类实例化");
}
}
**结果**
[外链图片转存中...(img-EO4PY4I4-1564791888826)]
**抽象父类引用指向子类对象内存分析**
[外链图片转存失败(img-XCcG2B8A-1564791888828)(C:\Users\zsj55\AppData\Roaming\Typora\typora-user-images\1564731640549.png)]