Day9 抽象类和接口

抽象类

抽象类定义

只约定类所具有的抽象行为,没有具体实现相应行为。

语法格式

abstract class 类名{
  常量;
  变量;
  构造();
  访问修饰符abstract 返回类型 方法名;//抽象方法
  普通方法;
  静态方法();
}

应用场景

1.不适合创建对象。

2.有些功能没有必要实现,有不同的子类实现。

3.每次使用的都是子类的对象。

4.为所有的子类提供了一个模板,所有的子类都是在此模板的基础之上添加和修改完善功能而创建出来的。

注意事项

1.不能创建对象。

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 }
View Code

接口

定义接口

提供了一组规则。

访问修饰符 interface 接口名{//所有成员都是public
  常量;//public static final
  抽象方法;//public abstract
  默认方法;//public default 类型 名(){实现}
  静态方法;//public static 类型 名(){实现}
           //不能被 实现类继承
           //不能被 子接口继承
  静态内部类型;//(public static 内部类,内部接口,内部枚举)
}

接口特点

1.接口不能创建对象。

2.由实现类来实现功能。

3.普通的实现类,必须实现接口中的所有抽象方法。(抽象实现类除外)

4.实现类可以实现多个接口的功能。

5.接口之间可以继承,而且可以多继承。

接口注意事项

1.静态方法不能被继承。静态方法用 接口名.静态方法名调用

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 }
View Code

接口和抽象类的异同

相同

1.都不能创建对象

2.都需要用子类或实现类来继承或实现。

3.都可以包含抽象方法。

4.普通的子类或实现类需要实现所有的抽象方法(抽象的除外)。

不同

1.抽象类是个类,是个模板类,为子类提供模板,是个半成品。

2.接口是提供了一个功能,是一个规范。

3.抽象类 子类是单一继承。

4.实现类 可以实现多个接口。

5.接口之间可以多继承。

原文地址:https://www.cnblogs.com/qingyunzong/p/8252933.html