Java编程思想 第九章 接口

9.1 抽象类和抽象方法

抽象方法:仅有声明而没有方法体

抽象类:(1)包含抽象方法的类必须被限定为抽象的(不需要所有方法都是抽象的)。抽象类可以没有抽象方法(为了让该类无法实例化)。(2)抽象类是普通的类与接口之间的一种中庸之道。抽象类是不完整的,因此无法实例化。如果导出类为所有抽象方法提供了定义,那么导出类可以实例化,否则导出类也是抽象类。

public interface A1 {
	void a1();
}

public interface A2 extends A1 {
	void a2();
}

abstract class B1 implements A2 {
	public void a1() {
    	System.out.println("a1被实现了");
    }
    abstract public void b1();
}

class C1 extends B1 {
	public void a2() {
		System.out.println("a2被实现了");
	}

	public void b1() {
		System.out.println("b1被实现了");
	}

	public static void main(String[] args) {
		C1 b1 = new C1();
		b1.a1();
		b1.a2();
		b1.b1();
	}
}

9.2 接口

  • interface关键字产生一个完全抽象的类,没有提供任何具体实现。接口中的方法默认是abstract和public的。
  • 接口也可以包含域,但是这些域被隐含是static和final的。也是public的。
  • 一个普通类可以通过implements关键字实现接口,必须实现所有的抽象方法。要实现一个接口时,接口中被定义的方法必须被定为public,否则在方法被继承过程中,其可访问权限被降低,编译器报错。

9.4 多重继承

一个具体类只能有一个父类,但是可以实现多个接口
具体类必须放到前面,后面是接口,否则会报错。
如果父类和接口有同名方法。因为子类需要实现该方法,因此调用的是实现的方法。

public class Man extends Person implements Eat, Fly {
	public void eat() {}
	public void fly() {}
} 

9.5 通过继承来扩展接口

public interface A { 
	void a1();
	void a2();
}

public interface B { 
	void b1();
}

public interface C extends A, B 	{ 
	void c1();
}

public class implements C { 
	void a1() {}
	void a2() {}
	void b1() {}
	void c1() {}
}

9.7 接口中的域

接口与中的任何域都自动是static和final的,所以接口是一种很便捷的用来创建常量组的工具,在Java SE5之前是产生枚举类型的唯一途径。
域自动是public的。

public interface Person {
	int age = 200, height = 180;
	void eat();
}

9.8 嵌套接口

接口可以嵌套在类或其他接口中。

接口中可以定义接口,默认且必须是公共的。

public interface bbb {
	public interface bbbb {}
	interface bbbb {}
}

类中可以定义接口,具有任何访问修饰符(接口也可以private)。

public class bbb {
	public interface bbbb {}
	interface bbbb {}
	private interface bbbb {}
}

类中可以定义类

public class C {
	private class c1 {
		void f() {
			System.out.println("c1被实现了");
		}
	}

	private class c2 {
		void f() {
			System.out.println("c2被实现了");
		}
	}
	
	public c1 getc1() {
		return new c1();
	}
	
	public c2 getc2() {
		return new c2();
	}
}

public class D {
	public static void main(String[] args) {
		C c = new C();
		//C.c1 a1 = c.getc1();
		C.c2 a2 = c.getc2();
		a2.f();
	}
}

类在实现嵌套接口时不用实现其内部的接口

9.9 接口与工厂

生成遵循某个接口的对象的典型方法就是工厂方法设计模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值