初学java,此例子只是为了验证以下几点:

 

1.接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类(如接口Z继承接口Y,抽象类A实现接口Z,抽象类C继承非抽象类B

2.抽象类可以有非抽象方法,甚至可以没有抽象方法,但是有抽象方法的类一定是抽象类(如抽象类A中的mm方法,如把方法aa注释掉也可以正常运行)

3.接口的方法必须被全部实现,抽象类的非抽象方法可不被实现(如抽象类A的非抽象方法mm可不被他的子类B实现(覆写))

4.抽象类继承某个类时,可以不实现(覆写)其方法(如抽象类C继承非抽象类B,却没有实现其方法)

5.某类型的对象只能实现其本身或比其层次更高的方法(如x2能实现yyzzaa等方法而不能实现方法bb

 

这里我理解成算术关系:

 

Y>=Z>=A>=B>=C

 

A类型的对象只能实现大于或等于A类的方法,而不能实现小于A

非抽象类B类的对象必须实现大于B类的类或接口的全部方法(注意第点)

抽象类C可以不实现所有方法,包括大于C

 

 

 1 2 
 3 public class test {
 4                                 /**Z接口继承Y接口,
 5                                  * 抽象类A继承Z接口,
 6                                  * 非抽象类B继承抽象类A,
 7                                  * 抽象类C继承非抽象类B*/
 8 
 9     public static void main(String[] args) {
10         B x1 = null;        // 声明对象x1,其类型是B类
11         x1 = new B();       // 实例化对象x1
12         x1.yy();
13         x1.zzz();
14         x1.zz();
15         x1.aa();
16         x1.bb();
17         x1.mm();         //直接调用抽象类A的非抽象方法
18 
19         System.out.println("******************************");
20 
21         A x2 = new B();       //声明并实例化对象x2,x2的类型是A类
22         x2.yy();
23         x2.zzz();
24         x2.zz();
25         x2.aa();
26         //x2.bb();      // 因为此时实例化对象x2的类型是A,所以x2不能调用B类的方法,只能调用接口Y、接口Z和类A自己的方法
27                         //此时方法的调用只能调用其父类、接口或父类的父类和父类的接口等以上的方法,不能调用子类的方法
28         x2.mm();
29     }
30 };
31 
32 
33 interface Y{
34    void yy();            //接口的所有方法只能使用默认或public声明
35 };
36 
37 
38 interface Z extends Y{       //接口Z继承接口Y
39     public void zz();
40     public void zzz();
41 };
42 
43 
44 abstract  class A implements Z{      //抽象类A实现接口Z,可不实现其方法
45 
46     public abstract void aa();      //抽象类的抽象方法
47 
48     protected static void mm() {         //抽象类的非抽象方法
49         System.out.println("这是抽象类A的非抽象方法");
50     }
51 };
52 
53 
54 class B extends A {
55 
56     public void bb(){
57         System.out.println("这是B类的方法");
58     }
59 
60     public void aa() {       //覆写抽象类A的抽象方法
61         System.out.println("这是A类的方法");
62     }
63 
64     public void zzz() {         //覆写父类A所实现的接口Z的方法
65         System.out.println("这是Z接口的方法1");
66     }
67 
68     public void zz() {         //覆写父类A所实现的接口Z的方法
69         System.out.println("这是Z接口的方法2");
70     }
71 
72     //非抽象类必须实现父类以及父类的父类或接口的方法
73     public void yy() {
74         System.out.println("这是Y接口的方法");
75     }
76 };
77 
78 
79 abstract class C extends B{       //抽象类C可以不实现父类B的方法
80 
81 }



 

初学小白第一次发文,大家有什么其他见解请评论或联系我一起讨论哈。