Java入门基础之方法的多态特性

357 查看

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这个地址(引用关系不能变,)。但是对象里面的值可以改变。