Day9 抽象类和接口
abstract class 类名{ 常量; 变量; 构造(); 访问修饰符abstract 返回类型 方法名;//抽象方法 普通方法; 静态方法(); }
2.有些功能没有必要实现,有不同的子类实现。
3.每次使用的都是子类的对象。
4.为所有的子类提供了一个模板,所有的子类都是在此模板的基础之上添加和修改完善功能而创建出来的。
2.必须由子类继承使用。
3.普通的子类必须实现抽象类中的所有抽象方法。(抽象子类除外)
4.构造方法不能是抽象的。
5.abstract不能和private、final、static一起使用。
6.抽象类中的抽象方法不是必须的,可以写,可以不写。
1 abstract class TrafficTool1{ 2 int count; 3 public abstract void run() ;//抽象方法 4 } 5 class Car2 extends TrafficTool1{ 6 @Override 7 public void run() { 8 System.out.println("汽车在公路上行驶"); 9 } 10 } 11 class Tube2 extends TrafficTool1{ 12 public void run() { 13 System.out.println("地铁在 地下行驶"); 14 } 15 } 16 public class TestTrafficTool1 { 17 public static void main(String[] args) { 18 Car2 c2 = new Car2(); 19 c2.run(); 20 Tube2 t2 = new Tube2(); 21 t2.run(); 22 23 24 } 25 26 }
提供了一组规则。
访问修饰符 interface 接口名{//所有成员都是public 常量;//public static final 抽象方法;//public abstract 默认方法;//public default 类型 名(){实现} 静态方法;//public static 类型 名(){实现} //不能被 实现类继承 //不能被 子接口继承 静态内部类型;//(public static 内部类,内部接口,内部枚举) }
2.由实现类来实现功能。
3.普通的实现类,必须实现接口中的所有抽象方法。(抽象实现类除外)
4.实现类可以实现多个接口的功能。
5.接口之间可以继承,而且可以多继承。
2.实现多个接口方法名相同的处理
解决问题:用default
1 interface WebBank{ 2 void webService();//网上支付功能 3 //public abstract void webService(); 4 default void fd() {} 5 } 6 //实现类 7 class Jingdong implements WebBank{ 8 @Override 9 public void webService() { 10 System.out.println("京东实现了支付功能"); 11 } 12 public void show() {} 13 } 14 class Taobao implements WebBank{ 15 public void webService() { 16 System.out.println("淘宝实现了支付功能"); 17 } 18 } 19 public class TestWebBank { 20 public static void main(String[] args) { 21 WebBank web = new Jingdong(); 22 web.webService(); 23 web.fd(); 24 // web.show();//屏蔽 25 /* Jingdong jd = new Jingdong(); 26 jd.webService(); 27 Taobao tb = new Taobao(); 28 tb.webService();*/ 29 30 } 31 32 }
相同
2.都需要用子类或实现类来继承或实现。
3.都可以包含抽象方法。
4.普通的子类或实现类需要实现所有的抽象方法(抽象的除外)。
不同
2.接口是提供了一个功能,是一个规范。
3.抽象类 子类是单一继承。
4.实现类 可以实现多个接口。
5.接口之间可以多继承。