Person p=new Student();//父类对象在子类实例化
在赋值运算符“=”左侧,定义了父类person对象p,而在赋值运算符“=”右侧,用new Student()声明了一个子类无名对象,然后将该子类对象赋值为父类对象p。
多态的三要素:1.有类的继承2.要有父类引用子类对象3.方法重写和调用
方法的多态性体现在重载上。(即通过传递不同的参数来令同一方法接口实现不同的功能)
向上转型和 向下转型
向上转型:父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。(父类引用指向子类对象)
向下转型:与向上转型相反,也就是说父类的对象可以转换成子类对象,但是需要注意的是,这时则必须要进行强制的类型转换。(多态和转型改变的引用,对象不改变)
对象多态性的关键思想:父类对象依据被赋值的每个子类对象的类型,做出恰当的响应(即与对象具体类别相适应的反应)。
多态性的本质:同样的消息或接口在发送给不同的对象时,会产生多种形式的结果。
A a=new B();//实例化子类对象,A是父类B是子类
B b=(B)a;//向下转型,强制完成。
总结:在形式上,类定义的对象只能看到自己所属类中的成员。父类对象无法看到子类的新扩充方法。
被关键词static修饰的静态方法是不能被覆盖的,java就是利用这一特性达到隐藏的效果。
(黑线代表地址,红线代表能看到的东西)
Person p=new Student();
设计方法时尽量用父类参数做引用 (因为会发生多态)
【实例】
//父类
public class DuoTai {
public String name;
public void biaoyang(){
System.out.println("I'm person!");
}
}
//校长类
public class DuoTaiMaster {
public void biaoyang(DuoTai d){
d.biaoyang();
}
}
//子类教师类
public class DuoTaiTeacher extends DuoTai {
public String name;
public void biaoyang(){
System.out.println("I'm teacher");
}
}
//测试类
public class DuoTaiTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
DuoTaiMaster d= new DuoTaiMaster();
DuoTaiTeacher t=new DuoTaiTeacher();
DuoTai dt=new DuoTai();
d.biaoyang(t);
d.biaoyang(dt);
dt.toString();
System.out.println(dt.toString());
final int a=10;
}
}
重写 :函数的申明部分必须一样,但是函数体可以不一样(也可以一样,只不过一样就没有意义了)。严格区分重写和重载的区别!
final int a=10; final修饰的值无法改变。修饰方法时不能被重写。在定义类的时候加final关键字,这个类不能被继承。
final Student s= new Student();//不能改变其值;只能指向s这个地址(引用关系不能变,)。但是对象里面的值可以改变。
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123