java基础之接口、多态

一、接口:是Java语言中一种引用类型【组数、类也是引用类型】,内部主要就是封装了方法,
包括(抽象方法、默认方法、静态方法、私有方法)

  格式:
    public interface 接口名称 {
            // 抽象方法  作用:该方法供子类实现使用
               public abstract void  show1();
            // 抽象方法简写
               void  show2();
           // 默认方法:  使用 default 修饰,不可省略,供子类调用或者子类重写  作用为了防止在接口升级中,而不音响子类对接口的实现,lambda表达式
               default void show3(){}
          // 静态方法: 使用  static 修饰,供接口直接调用
               static void show4(){}
          // 私有方法:  供接口中的默认方法或者静态方法调用。
               private void show5()
        }

二、接口的多实现: 一个类是可以实现多个接口

  格式:
        class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
            // 重写接口中抽象方法【必须】
           // 重写接口中默认方法【不重名时可选】  
        }

  特点:
        接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名的,只需要重写一次。
        接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须重写一次。
        接口中,无法定义成员变量,但可以定义常量,默认的修饰public static final修饰
              格式:public static final 数据类型 常量名 = 
        接口中,无构造方法,无方法创建对象
        接口中,没有静态代码块。

三、多态:一个对象拥有多种形态
例:小明是一个学生,同时也是一个人,即小明这个对象即拥有学生形态,也拥有人类形态

  使用多态的前提【重点】
        1 . 继承或者实现【二选一】
        2. 方法的重写【意义体现:不重写,无意义】
        3. 父类引用指向子类对象【格式体现】

        格式:
            父类类型 变量名 = new 子类名称()-->父类引用指向子类对象
                  或者
            接口名称 变量名 = new 实现类名称()

        多态下成员方法访问规则:
            变量名.方法名a(); //看右边 new 的是谁就运行谁的方法,条件:子类重写父类的情况下
            变量名.方法名b(); //该方法是父类特有的方法,此时将 new 子类名称()当作 new 父类名称()使用
            a、看 new的谁,就优用先,没有则向上找,条件:子类重写父类的情况下

        多态下成员变量访问规则:
            a、直接通过对象访问成员变量,看等号左边是谁,优先用谁,没有向上找
            b、间接通过成员方法访问成员变量,看该方法属于谁,优先用水,没有向上找


        定义子类:
           public class Zi extends Fu{
               @Override
               public void method() {
                System.out.println("子类的方法.....");
            }
              int num = 20;
          }

        定义父类:
           public class Fu {
             public void method(){
                System.out.println("父类方法.....");
            }
          public void methodFu(){
                System.out.println("父类特有方法.....");
            }
            int num = 10;
            int sum = 50;
         public void shou(){System.out.println(sum)};
       
       }
       
        测试:
          public class DemoTest {
          public static void main(String[] args) {
                System.out.println("...<多态下使用成员方法>...");
                Fu f = new Zi();
                f.method(); //父子类都有,优先用子
                f.methodFu(); //子类没有,父类有,向上找到父类
               System.out.println("...<多态下使用成员变量>...");
               System.out.println(f.num);
                f.shou();
            }
        }

四、引用类型转换

        向上转型:多态本身写法,父类引用指向一个子类对象时,便是向上转型
                    格式:
                          父类类型  变量名 = new 子类类型();
                          如:Animal animal  = new Cat();  创建一只猫,把它当做动物看待
                    含义:右侧创建一个对象,把它当做父类来看待
                    注意事项:向上转型一定是安全的,从小范围转向大范围
        
                    存在问题:向上转型,不能访问子类特有的方法,所以需要向下转型

        向下转型:其实是一个【还原】的动作
                    格式:子类类型 对象名 = (子类类型)父类对象
                    含义:将父类对象,【还原】成为本来的子类对象
  
                    Animal animal = new Cat();  //本来是猫,向上转型成为动物
                    Cat cat = (Cat)animal;  //本来是猫,已经被当做动物了,还原回来成为本来的猫
                    注意事项:
                    a、必须保证对象本来创建的时候,就是猫,才能向下转型成为猫
                    b、如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错

        变量名 instanceof 数据类型:这将会得到一个boolean直结果,也就是判断前面的对象能不能当做后面类型实例
posted @ 2020-07-30 16:18  jock_javaEE  阅读(109)  评论(0编辑  收藏  举报