• 接口 多态


    接口  Interface  

    比抽象类更抽象的类,只描述所该具备的方法,没有方法体,由接口的实现类(相当于子类)去实现。

    ①接口里只能是抽象方法  ② 接口中无法定义普通成员变量

    定义格式:

    public interface 接口名 {
    抽象方法1;
    抽象方法2;
    抽象方法3;
    }

    特点:

    l  接口中的方法均为公共访问的抽象方法   2 无法定义普通的成员变量

    类实现接口  implements   所有的接口都是用实现 不能说继承 

    接口特点

    1、接口是对外暴露的规则
    2、程序的功能扩展
    3、降低耦合度
    4、用来多实现
    5、类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
    6、接口与接口直接可以有继承关系,且接口可以多继承

    格式

    classimplements 接口 {
        重写接口中方法
    } 

     

    package com.oracle.demo01;
    //接口类型 把class改成 interface  左侧图标变成 i 抽象类是变成 a
    public interface Smoking {
        //抽象方法:public abstract 返回值类型         方法名(参数列表)
        //成员变量特点:public static final 变量名=变量值;
        //a:静态常量。常量:定义之后终身不变
        public static final int a=1;
        //接口里面只能有 abstract
        //抽象方法:public abstract 返回值类型  方法名(参数列表)
        //所有抽象方法不管你写不写 都默认public abstract修饰
        public abstract void smoke();
    }
    -----------------------------------------------------------------
    package com.oracle.demo01;
    //让student 去实现用implements Smoking接口
    public class Student implements Smoking{
        //重写    如果public后面不加abstract 就重写 2选1
        @Override
        public void smoke() {
            System.out.println("学生抽烟");        
        }
    }
    -----------------------------------------------------------------
    package com.oracle.demo01;
    //测试
    public class Demo {
        public static void main(String[] args) {
            //新建一个student方法
            Student student = new Student();
            //调用 smoke 方法
            student.smoke();
            //静态常量可以通过类名.变量名调用
            System.out.println(Student.a);//也可以用Smoking.a        
        }
    }

    接口成员方法特点

    接口可以定义变量,变量固定修饰符 public static final

    成员变量特点:public static final 变量名=变量值; (用static final 静  态修饰  常量 终身不变

    3不能创建对象(因为抽象类不可以创建,接口比抽象类还抽象 so.)

    4 接口成员可以定义方法,固定修饰符,public abstract

     

    由图得出结论

    接口多实现  :不能多继承 但可以多实现

    怎么解决多继承的弊端呢?

    弊端:多继承时,多个父类都有主体,子类调用产生不确定性。

    原因:多继承父类有主体,导致调用运行,不知道调用哪个

    为什么多实现能解决了呢?接口中的功能都没有方法体,由子类来明确。

    类继承类同时实现接口    

      接口弥补了java里单继承局限性  父类定义基本功能 ,接口定义扩展功能(可以理解为继承的重写、覆盖:子类继承了父类的方法并扩展了自己的方法

    class Fu {
        public void show(){}
    }
    //接口的方法 inter
    interface Inter {
        pulbic abstract void show1();
    }
    //先继承 后接口 
    class Zi extends Fu implements Inter {
        public void show1() {
        }
    }

     接口多继承  (都是接口就可以多继承  interface)

      ①类和接口是实现关系

      ②类继承一个类的同时,实现多个接口

      ③一个接口可以继承多个接口

     

    interface Fu1{   //接口Fu1
        void show();
    }
    interface Fu2{   //接口Fu2
        void show1();
    }
    interface Fu3{     ////接口Fu3
        void show2();
    }
    //Zi可以竭诚  Fu1Fu2Fu3  
    interface Zi extends Fu1,Fu2,Fu3{
        void show3();
    }
    //类和接口 是实现
    //类可以继承后实现
    //一个接口可以继承多个接口

     

    接口和抽象区别

    相同点:

    ①都位于继承顶端,被其他类实现或继承 

    ② 都不能new对象

    ③都包含抽象方法,子类都覆盖重写方法

    区别:

    ①  抽象类允许存在普通方法,避免子类重复实现这些方法。接口只有抽象方法

    ② 一个类只能继承一个直接父类,可实现多个接口。接口弥补了java单继承

    ③ 抽象类是这个事物该具备的内容,继承体系是一种 is..a关系

    ④ 接口是事物额外的功能,继承体系是like..a关系 

    二者选用:优先用接口! 

    多态

     定义、格式

    定义:就是父类的引用变量指向子类对象

    父类类型  变量名 = new 子类类型();

    变量名.方法名();

    多态中成员访问特点:

    :成员变量

     编译和运行都看左边

    :成员方法

     编译看左,运行看右 (由于成员方法存在重写,所以运行看右边 )

    :静态方法 

     编译 和运行都看左边

        (静态和类相关,算不上重写,所以访问是左边)

    :构造方法

     创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化

    package com.oracle.demo02;
    //这是父类
    public class Fu {
        int a=1;
    }
    ----------------------------------------------------
    package com.oracle.demo02;
    
    public class Zi extends Fu{
        int a=2;
    }
    ---------------------------------------
    package com.oracle.demo02;
    
    public class Demo02 {
        public static void main(String[] args) {
            //多态中调用成员变量的特点
            //编译、运行 看左边
            Fu f=new Zi();
            System.out.println(f.a);
        }
    }

     instanceof 关键字

     格式:

    boolean  b  = 对象  instanceof  数据类型;

     多态转型  两种 

    向上转型:

    子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。

    格式:

    父类类型  变量名 = new 子类类型();

    如:Person p = new Student();

    向下转型:

    一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用

    格式:

    子类类型 变量名 = (子类类型) 父类类型的变量;

    如:Student stu = (Student) p;  //变量p 实际上指向Student对象

    好处与弊端

     

    作业:

    1、多态是什么,多态的前提条件是什么?

    2、多态中成员访问的特点分别是什么?
        成员变量
        成员方法(非静态方法)
        静态方法


    3、什么是接口,它的特点是什么?

    4、接口的成员特点有哪些?

    5、抽象类和接口的区别是什么?


    6:定义一个父类Animal eat方法 , 定义两个子类 Dog  特有方法keepHome ,   Cat 特有方法 catchMouse ;并且 重写eat方法
       测试类中写一个方法,参数列表有一个参数Animla类型,
       要求: 调用该方法分别传递Dog对象 和Cat 对象, 使用instanceof进行将转后调用eat,和他们的特有方法


    7.测试: 如果一个方法的返回值类型是父类,那么能否返回一个子类对象.(该父类不管是类,抽象类还是接口)


    8.现有两种  OldPhone NewPhone; 两个类都有call()  sendMessage() 方法(考虑向上抽取一个父类);
            已知接口IPlay中有一个方法 playGame(),NewPhone添加玩游戏的功能;
        要求: 分别测试OldPhone和NewPhone的两个方法,再测试新手机palyGame()的方法.


    9 .(完成下面的汽车案例)
        描述:汽车都具有跑的功能,普通的奥迪车也不例外,但是高端的奥迪车除了具有跑的功能外,还具有自动泊车和无人驾驶的功能!
        需求:定义普通奥迪车,高端奥迪车,实现描述中的功能并测试

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    3. applicationCache
    9. 水平垂直居中的方法
    2. 贝塞尔曲线bezierCurveTo
    相识python 之小数据池 集合
    相识python --------- 列表 元祖 range 范围
    相识python while循环 代码块 编码初识 运算符
    相识python第二步:变量 注释 str int bool 用户交换 流程控制语句的解释用法
    python学习基础知识
    python的基础知识
    我对python的见解
  • 原文地址:https://www.cnblogs.com/zs0322/p/10885231.html
Copyright © 2020-2023  润新知