day03——接口/多态

接口

接口可以定义一定的规则,利用这些规定给类进行功能扩展。

接口的定义和使用

//定义接口
public interface 接口名1{
    public abstract void 方法名1();
}

//定义接口
public interface 接口名2{
    public abstract void 方法名2();
}

//实现接口
public class 类名 implements 接口名1,接口名2{
    @Override
    public void 方法名1(){
        ...
    }
    
    @Override
    public void 方法名2(){
        
    }
}

接口的成员特点

成员变量:只能是常量,默认被 public static final 修饰

构造方法:没有,也不能创建对象

成员方法:
	JDK7:只能是抽象方法,默认被 public abstract 修饰。必须复写
	JDK8: 可以写默认方法,public default 修饰的方法。可选复写
		  可以写静态方法,public static 修饰的方法。 使用接口名调用
	JDK9: 可以写私有方法,被 private 修饰的方法。 只能在本接口中使用。

类与接口的关系

1.类与类: 单继承关系
2.类与接口: 多实现的关系,可以在继承的基础上实现多个接口
3.接口与接口:多继承关系

多态

多态指的是同一个对象,可以具有多种表现形态。

多态的前提:
	1.需要有继承/实现的关系
	2.需要有方法复写
	3.父类/接口接收子类对象
		Animal a = new Dog();
        a.eat();

多态的成员访问特点

1.成员方法的访问特点(编译看父类,执行看子类)
	如果方法没有复写,执行父类的方法;如果有复写就执行子类的方法.
    也就是说,只能调用父类中已存在的方法,如果调用的方法是子类特有的,那么会报错(见弊端)
	
2.成员变量的访问特点(编译、执行看父类)
	只能访问父类的变量,父类没有就报错了。

多态的好处和弊端

1.好处:提高了代码的扩展性
	把方法的参数写父类/接口,调用方法可以传递任意的子类对象
	
2.弊端:不能调用子类特有的方法
	如果想调用子类特有方法,可以进行向下转型。
	
3.多态的转型
	向上转型: Animal a=new Cat(); //多态的写法,就是向上转型
	向下转型: 在多态的基础上,才能进行向下转型;原本是什么类型,才能还原成什么类型。
		if(a instanceof Cat){
			Cat cat=(Cat)a;
		}

电脑使用Usb接口

//定义接口: 制定规则
public interface Usb {
    public void powerOn();
    public void loadDriver();
    public void run();
} 
//实现类实现接口: 遵守规则
public class UsbMouse implements Usb {
    @Override
    public void powerOn() {
        System.out.println("鼠标通电");
    }

    @Override
    public void loadDriver() {
        System.out.println("加载鼠标的驱动程序");
    }

    @Override
    public void run() {
        System.out.println("鼠标运行");
    }
}
//实现类实现接口: 遵守规则
public class UsbKeyBoard implements Usb {
    @Override
    public void powerOn() {
        System.out.println("键盘通电");
    }

    @Override
    public void loadDriver() {
        System.out.println("加载键盘的驱动程序");
    }

    @Override
    public void run() {
        System.out.println("键盘运行");
    }
}
public class Computer {
    //把接口方法的参数,调用方法时可以接收任意的子类对象
    // Usb u = new UsbKeyBoard();
    // Usb u=new UsbMouse();
    public void function(Usb u) {
        u.powerOn();
        u.loadDriver();
        u.run();
    }
}
public class Demo2 {
    public static void main(String[] args) {
        Computer com = new Computer();

        com.function(new UsbMouse());
        com.function(new UsbKeyBoard());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值