可以这样定义 Person p = new Student()
就是你问的 “JAVA父类引用指向子类的对象”
但是你得注意:父类的引用指向子类的话,此时的 p 只能使用Person类中存在的方法,但是子类
Student类中扩充的方法就不能调用了
class Person {
private int age
private String name
public void setName(String name){
this.name = name
}
public String getName(){
return this.name
}
public void setAge(int age){
this.age = age
}
publc int getAge(){
return age
}
}
class Student extends Person {
private Strng school
public void setSchool(String school){
this.school = school
}
public String getSchool(){
return this.school
}
}
public class Demo{
public static void main(String [] args){
Person p = new Student()
//p.setSchool("清华大学")
//String school = p.getSchool()//以上的两个语句都是错误的,你自己看看吧
}
}
没错,子类相当于父类的改进或扩充,功能上子类会比父类更强大,属性更独特,定义一个父类引用指向子类对象,可以使用子类的功能并且可以抽取父类的共性,父类型的引用可以调取父类的属性和方法(包括子类中重写的父类属性或方法),但不能调用子类定义但父类没有的方法.也有人管这种叫做面向接口编程,目的也是低耦合,只需要关心父类能做什么,不用关注子类是怎么做的,并且随时可以通过修改或者替换子类,而不用修改其他的东西.