Java_类和对象(多态 接口)

接口

  • 多个无关的类可以实现同一个的接口.
  • 一个类可以实现多个无关的接口.但只能继承一个抽象类.
  • 接口中的属性只能是public static final的.
  • 方法只能是抽象的.
  • 接口中继承的关键字是 implements.
  • 抽象类可以有构造方法.

接口和类的相似点

  • 一个接口可以有多个方法.
  • 接口文件保存在.java结尾文件中.,文件名使用接口名.
  • 接口的字节码文件保存在.class结尾的文件中.
  • 接口相应的字节码文件必须在与包名称相匹配的目录结构中.

接口与类的区别

  • 接口不能用于实例化对象.
  • 接口没有构造方法.
  • 接口中的所有方法必须是抽象方法.
  • 接口不能包含成员变量,出了static和final变量.
  • 接口不是被类继承了,而是被类实现了.
  • 接口支持多继承.

抽象类和接口的区别

  • 抽象类可以定义非抽象方法,接口不行(必须是抽象方法).
  • 抽象类有构造方法,接口没有.
  • 一个类只能继承一个抽象类,而一个类可以实现多个接口.(接口可以多继承).

接口的案例

public interface Carepet {
    public  void play();
    public  void eat();
    

}
interface playgrame{
    public void plays();
}

class work implements Carepet,playgrame
{
    public static void main(String[] args) {
        Carepet carepet = new work();
        work w = (work)carepet;
        w.plays();
        w.play();
        w.eat();
        
    }
@Override
    public void play() {
        System.out.println("在工地上完");
        
    }
@Override
    public void eat() {
        System.out.println("吃剩饭");
    }
@Override
    public void plays() {
        System.out.println("在网吧玩游戏");
        
    }
}
class farmer implements Carepet{

    @Override
    public void play() {
        System.out.println("在农场玩");
        
    }
@Override
    public void eat() {
        System.out.println("吃饭");
        
    }
}

class leader implements Carepet{

    @Override
    public void play() {
        System.out.println("在操场玩");
        
    }

    @Override
    public void eat() {
        System.out.println("吃专用粮");
        
    }
    
}

多态

  • 父类引用指向子类对象. [Animal a = new Cat()]
  • 必须有继承.
  • 重写.
  • 强制类型转换 Animal a = new Cat() Cat c = (Cat)a;
    *instanceof 判断真实类型

多态案例

public class Test1 {
    public static void main(String[] args) {
        //Cat cat = new Cat();
        Animal a = new Cat();
        a.eat();
        //instanceof  当父类中没有子类的方法的时候需要强转     判断a的真实类型是不是cat.
        if (a instanceof Cat) {
            System.out.println("猫类");
            Cat c = (Cat) a;//强制类型转换
            c.sleep();
            }
    }
}
class Animal{
    void eat(){
        System.out.println("动物吃");
        }
}

class Dog extends Animal{
    @Override
    void eat() {
        System.out.println("狗狗爱吃骨头");;
    }
}

class Cat extends Animal{
    @Override
    void eat() {
        System.out.println("猫爱吃鱼");;
    }
    void sleep(){
        System.out.println("猫睡觉");
    }
    
}

你可能感兴趣的:(Java_类和对象(多态 接口))