java 面向对象抽象类和接口

1.abstract:可以修饰类和方法,被abstract修饰过的称为抽象类和抽象方法。

抽象类: 除了不可以创建对象, 其他和普通类一致。 可以有成员方法、静态方法和构造方法(提供给子类调用)等。

抽象方法: 含有抽象方法的类必须是抽象类, 但抽象类不一定有抽象方法; 抽象方法不允许有方法体,只能以分号结尾 , 即只做声明

1 public abstract class Lianxi {
2     public abstract void print();
3 }

抽象方法必须被子类实现,如果子类不能实现父类的抽象方法,那么子类也必须是抽象类。

什么情况下使用:父类的名称比较抽象,创建对象无意义,如动物类;避免子类设计的随意性,严格限制子类的设计,使子类之间可以更加通用。

2.接口详解:使用interface修饰,是一种数据类型,引用数据类型。

如果一个类中所有的方法均为abstract方法,那么这个类就可以声明为接口

1 public abstract class MyClass {
2     public abstract void print();
3     public abstract String fun();
4     public abstract void show();
5 }

可以改为如下代码;  包->右键->新建->interface(接口)

1 public interface MyInterface {    
2     void print();
3     String fun();
4     void show();
5 }

接口不是类,不可以定义构造方法

接口可以包含:抽象方法(可省略public abstract 默认是public的) 、非抽象方法(JDK1.8新特性 ,必须使用default关键字)、属性常量(public static final),public static final 可以省

略不写

 1 public interface MyInterface {
 2      String name="张三";
 3      public static final String name2="张三";//等同上一句
 4      void show();
 5      String fun();
 6      int [] method();
 7      /**JDK1.8新特性 ,必须使用default关键字*/
 8      public default void method2(){
 9          
10      }
11      //接口中不允许定义构造方法
12     /* public MyInterface(){
13          
14      }*/
15 }

3.接口与类的关系

(1) 类去实现接口中的抽象方法,实现关系 ,implements ,实现接口中的所有抽象方法

 1 public class InterfaceImpl implements MyInterface{
 2 
 3     @Override
 4     public void show() {
 5         // TODO Auto-generated method stub
 6         
 7     }
 8 
 9     @Override
10     public String fun() {
11         // TODO Auto-generated method stub
12         return null;
13     }
14 
15     @Override
16     public int[] method() {
17         // TODO Auto-generated method stub
18         return null;
19     }
20 
21 }

(2) 一个类存在继承关系,又存在实现关系?extends前?implements 前?

继承 →父子关系 →亲爹
实现 →实现关系-→干爹

extends 在前,implements 在后

1 public class Stuent extends Person  implements Play{

(3) 如果父类与接口中有完全相同的方法(一模一样),子类/实现类所实现的方法是父类的?接口的?

父类优先于接口,子类实现的是父类中的方法

(4) 如果父类中与接口中有同名方法(只是名字相同,参数不同),对子类/实现类有什么要求呢?

父类与接口中的方法,在子类/实现类中构成方法的重载

4。接口的特征:传递性和继承性(多继承)

 1 public interface InterfaceA {
 2     public void show();
 3 }
 4 interface InterfaceB {
 5     
 6 }
 7 interface InterfaceC extends InterfaceB,InterfaceA{
 8     
 9 }
10 class Impl implements InterfaceC{
11 
12     @Override
13     public void show() {
14         // TODO Auto-generated method stub
15         
16     }
17     
18 }

5.使用接口的意义

可以实现设计和实现的分离,抽象出 N 多不同类的共同点。
举例:飞机,鸟,球,导弹,宇宙飞船……

继承:is –a 关系  三角形 is a 几何图形

鸟 is a 球? 不成立

接口 : has –a 关系 手机 has a 拍照的功能   飞机 has a 飞行的

接口体现的是一种能力

 1 public interface Fly {
 2     public void flying();//飞行的能力
 3 }
 4 class AirPlane implements Fly{
 5 
 6     @Override
 7     public void flying() {
 8         System.out.println("飞机在祖国的蓝天上自由飞翔...........");
 9     }
10     
11 }
12 class Bird implements Fly{
13     @Override
14     public void flying() {
15         System.out.println("小鸟唱着动听的歌,在天空中飞................");
16     }
17 }
18 class FootBall implements Fly{
19     @Override
20     public void flying() {
21         System.out.println("球被踢了一脚,划了个美丽的弧线飞到了对方的球门里..........");
22     }
23 }
 1 public class Test {
 2     public static void main(String[] args) {
 3         //接口类型(引用数据类型)指向实现类的对象
 4         Fly airPlane=new AirPlane();
 5         Fly bird =new Bird();
 6         Fly football=new FootBall();
 7         //调用相同的方法
 8         airPlane.flying();
 9         bird.flying();
10         football.flying();
11         //运行结果,不相同
12         
13     }
14 }

总结:使用接口实现多态的步骤
(1) 编写接口
(2) 实现类实现接口中的方法
(3) 接口(类型)new 实现类对象

原文地址:https://www.cnblogs.com/bfcs/p/10309672.html