18_多态

 

 1.概念


 

 2.格式


 

 3.前提


 

 4.多态与继承


 

5.多态的优缺点


 

 6.转型

 


 

 7.instanceof


 

8.代码实现

package JavaBasicReview;

public class JavaGrammer {

    public static void main(String[] args) {
        //多态,父类引用指向子类对象(向上转型)
        Fu fu = new Zi();
        fu.methodFu();//可以访问父类中特有的方法
        fu.methodOne();//可以访问父类中被子类重写的方法
        System.out.println(fu.age);//可以访问父类的成员变量
        //System.out.println((fu.name);//无法访问子类成员变量
        System.out.println(((Zi) fu).name);//如果想访问子类成员变量,必须向下转型
        //fu.methodZi();//无法访问子类特有的方法
        ((Zi) fu).methodZi();//如果想访问子类特有方法,必须向下转型
        System.out.println(fu instanceof Zi);
        System.out.println(fu instanceof Fu);

        System.out.println("========继承============");
        Zi zi = new Zi();
        zi.methodFu();//可以访问父类特有的方法
        zi.methodOne();//可以访问父类中被子类重写的方法
        System.out.println(zi.age);
        System.out.println(zi instanceof Zi);
        System.out.println(zi instanceof Fu);

        System.out.println("====多态的应用========");
        //多态的应用,前期定义父类,后期使用子类,提高了代码的扩展性
        methodOne(new Zi());
        methodOne(new ZiOne());
    }

    public static void methodOne(Fu obj){
          obj.methodOne();
    }

}

class Fu {
    int age = 99;
    void methodFu(){
        System.out.println("Fu类中特有的方法");
    }
    void methodOne(){
        System.out.println("Fu类中被重写的方法");
    }
}

class Zi extends Fu {
   int age = 88;
   String name = "zi";

   void methodZi(){
       System.out.println("Zi类中特有的方法");
   }

    @Override
    void methodOne() {
        /*super.methodOne();*/
        System.out.println("被子类重写的方法,Zi类重写");
    }
}

class ZiOne extends Fu{
    @Override
    void methodOne() {
        /*super.methodOne();*/
        System.out.println("被子类重写的方法,ZiOne类重写");
    }
} 

 

posted @ 2020-05-13 11:40  学而不思则罔!  阅读(178)  评论(0)    收藏  举报