复习day02

//认识多态
//多态的前提:有继承/实现关系,存在父类引用子类对象,存在方法重写
//1,对象多态
People p1=new Student();
p1.run();//识别技巧:编译看左边,运行看右边
System.out.println(p1.name);//注意:对于变量,编译看左边,运行看左边
People p2=new Teacher();
p2.run();//行为多态
System.out.println(p2.name);
  //多态的好处
      //好处1:可以实现解耦合,右边的对象可以随时切换,
      People p1=new Student();
      p1.run();//识别技巧:编译看左边,运行看右边
     // p1.test();多态下缺点,编译时左边没有test方法,所以无法调用子类的方法(就是子类的独有功能)
      //强制类型转换:子类 变量=(子类)父类变量
      Student s1= (Student) p1;
      s1.test();
      //强制转化存在的问题:编译阶段有继承和实现就可以转换,但是运行时就会报错
    // Teacher t1= (Teacher) p1;//运行时会出现错误:ClassCastException
      if (p1 instanceof Student){//通过用instanceof来判断当前的真实类型
          Student s2= (Student) p1;
          s2.test();
      }else {
          Teacher t2=(Teacher) p1;
          t2.test();
      }
      System.out.println("-----------------------------");
    //好处2:可以通过使用父亲类型的变量作为形参,可以接受一切子对象
    Student s=new Student();
    go(s);
    Teacher t=new Teacher();
    go(t);
  }
public  static void go(People p ){
    if (p  instanceof Student){
        Student s2= (Student) p;
        s2.test();
    }else {
        Teacher t2=(Teacher) p;
        t2.test();
    }
}

//认识final
        //3,final可以修饰变量的总规则,有且只能改变一次
        //变量:局部变量,成员变量;静态变量,实例变量

        final  int a;//final修饰常量,存储的数据不能改变
        a=23;
        final int m[]={11,22,33};//final修饰的引用类型的变量,变量的地址不能改变,但地址指向的内容可以改变
    }
    public static void buy(final  double z){
        //z只能赋值一次
    }
}

//final修饰类,类不能被继承
final class A{}
//class  B extends A{}

//2.final修饰方法,方法就不能被重写
class B{
    public final void test(){

    }
}

//认识抽象类
 //抽象类中不一定有抽像方法,有抽象方法一定有抽象类
 //类该有的成员(成员变量,方法,构造器)抽象类都可以有
 //抽象类主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
// A a=new A();
 //a.run();抽象方法中没有内容
 //一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义为抽象类
//认识抽象类的好处:抽出这样的抽象类就是为了更好的执行多态
//接口的好处
//1.接口弥补了类单继承的不足,一个类可以同时实现多个接口
Driver s=new A();
s.driver();
//2.程序员可以实现面向接口编程,方便灵活各种切换对象
Driver a=new B();
//默认方法:必须使用default修饰,默认会被public修饰
    //实例方法:对象的方法,必须使用实现类的对象来访问
    //接口不能用对象调用,只能通过实现类调用
   public default void test(){
       System.out.println("默认方法");
       test2();
    }
//私有方法:必须使用private修饰,(jdk9)开始支持
// 实例方法:对象的方法
   private void test2(){
       System.out.println("私有的方法");
   }
    //静态方法:必须使用static修饰,默认会被public修饰
    //
    static  void test3(){
        System.out.println("静态方法");
    }
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值