接口 多态

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

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/zs0322/p/10885231.html