面向对象:接口

1.抽象(abstract)

1.1理解抽象

  1. 抽象可以理解为关键词,也可以理解为面向对象的一种性质
  2. 抽象可以修饰类和方法,抽象方法没有方法体
  3. 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口
  4. 抽象类不能实例化,要实例化只能通过子类(抽象多态)
  5. 抽象类子类要么是抽象类,要么实现所有所有父类的抽象方法
abstract class CLASS_NAME{
    public abstract void METHOD_NAME( );
}

1.2关键词冲突

static

  • 被abstract修饰的方法没有方法体
  • 被static修饰的方法可以用类名调用,抽象方法没有方法体没意义

final

  • final修饰的方法体不能被重写,abstract则是子类必须重写

private

  • 被abstract修饰是为了让子类看到并强制重写
  • 被private修饰不让子类访问,所以两者也是矛盾的

1.3匿名抽象

对象不匿名,类匿名

@Test
public void anonymousUs(){
	//匿名类的使用
	aHuman aa = new aHuman() {
		@Override
		public void eat() {
			System.out.println("建筑工人多吃肉有力气干活");
		}

		@Override
		public void learn() {
			System.out.println("建筑工人学习土木知识");
		}
	};
	anony(aa);

对象,类都匿名

anony(new aHuman() {
	@Override
	public void eat() {
		System.out.println("电器工人多吃肉有力气干活");
	}

	@Override
	public void learn() {
		System.out.println("电器工人学习CAD和工业知识");
	}
});

2.接口

2.1理解接口

  1. 从狭窄的角度来讲就是指Java中的interface
  2. 从广义的角度来讲就是对外提供规则的都是接口
  3. 接口就是一种规范(开发中会体现面向接口编程)
  4. 极大意义上弥补Java的单继承性
  5. 接口的使用充分的体现了多态性

2.2接口特点

  1. 接口中没有构造器(无法实例化)
  2. 接口实例化通过实现类来实例化(多态体现)
  3. 接口中的方法都是抽象的(JDK1.8前)
  4. 实现接口的类,如果没有实现全部接口的方法,必须加上abstract
  5. 如果此类实现了接口的所有方法,就没必要加上abstract

2.3JDK8新特征

成员特点

变量:只能是常量,并且是static和public的
方法:只能是抽象方法(1.8以后还可以定义静态方法,default方法)
注:静态方法和default方法有方法体,抽象方法没有方法体

注意事项

  1. 接口中的静态方法只能通过接口.方法名调用
  2. 接口中的default方法类可以实现,也可以不实现
  3. 当实例类继承的两个接口中出现同名的方法后,需要通过接口名.super.方法名调用
  4. 若上述两个接口的参数也一样的情况下会报错(接口冲突)
  5. 实际开发中不会这么无聊的去写
interface See{
	public static final MAX_NUM = 996;
    
	public abstract void methdo1();
    
    public default void method2(){};
    
    public static void method3(){};
}

2.4匿名接口

  1. 非匿名实现类的匿名对象(多态写法)
    Computer.transferData(new Flash());
  1. 接口匿名 类非匿名
    USB mp3 = new USB() {
        @Override
        public void start() {
            System.out.println("mp3工作");
        }

        @Override
        public void stop() {
            System.out.println("mp3停止工作");
        }
    };
  1. 接口匿名 类也匿名
    Computer.transferData(new USB() {
        @Override
        public void start() {
            System.out.println("游戏机工作");
        }

        @Override
        public void stop() {
            System.out.println("游戏机停止工作");
        }
    });

3.两者区别

  1. 抽象类中定义的是该继承体系的共性功能,被继承体现的是"is a"的关系
  2. 接口中定义的是该继承体系的拓展功能,被实现体现的是"like a"的关系
  3. 其实接口也在逐渐的类化,例如JDK8加入了静态方法和默认方法
  4. JDK11又加入了私有方法,基本上实在向抽象类的意义靠拢拉近的

内部定义要求

Abstract:变量/常量谐可 抽象/非抽象方法谐可 有构造方法
Interface:常量 只能抽象方法 没有构造方法

关系区别

类与类:继承、单继承
类与接口:实现、单实现、多实现
接口与接口:继承、单继承、多继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值