1、Java SE面向对象部分18面向对象高级06Java SE面向对象部分-18.面向对象高级(06)上季内容回顾:1、面向对象中接口与抽象类的具体应用。 可以通过对象的多态性,为父类实例化,之后一切的操作标准以父类为主。本季主要知识点:讲解抽象类与接口的关系。1、一个抽象类中能否包含一个接口呢?abstract class Apublic abstract void fun();interface Bpublic void print();我们来验证测试下哈发现生成A$B.class,表示B作为A的内部接口,证明一个抽象类中可以包含一个内部接口。那怎么使用呢?我们看下面哈首先我们先子类X覆写父
2、类A方法但不覆写接口B中的方法abstract class Apublic abstract void fun();interface Bpublic void print();class X extends A/覆写父类fun()方法public void fun()System.out.println(Hello World!);发现编译没有问题哈现在我们测试覆写接口方法哈abstract class Apublic abstract void fun();interface Bpublic void print();class X extends A/覆写父类fun()方法public
3、void fun()B b = new Y();b.print();class Y implements B/覆写父类接口中的方法print()public void print()System.out.println(Hello Java!);现在我们加上主方法进行测试哈abstract class Apublic abstract void fun();interface Bpublic void print();class X extends A/覆写父类fun()方法public void fun()B b = new Y();b.print();class Y implements
4、B/覆写父类接口中的方法print()public void print()System.out.println(Hello Java!);public class Demo01public static void main(String args)A a = new X();a.fun();证明一个抽象类中可以包含一个接口,之后在抽象类的子类中可以有选择的是否实现抽象类中的接口。 2、一个接口中能否包含一个抽象类呢?同上,都是可以选择是否实现interface Apublic void fun();abstract class Bpublic abstract void print();下面
5、我们写上个子类,检验一下是否可以有选择实现抽象类Binterface Apublic void fun();abstract class Bpublic abstract void print();class X implements Apublic void fun() 验证可以哈下面覆写抽象类B中print()方法interface Apublic void fun();abstract class Bpublic abstract void print();class X implements Apublic void fun()new Y().print();class Y exten
6、ds Bpublic void print()System.out.println(Hello World!);public class Demo02public static void main(String args)A a = new X();a.fun(); 3、观察以下的程序,验证输出结果 abstract class Apublic A()this.print();public abstract void print();class B extends Aprivate int i = 30;public B(int i)this.i = i;public void print()
7、System.out.println(i = +i);public class Demo03public static void main(String args)new B(50);输出结果为0哈,这与子类对象实例化过程有关哈回顾:子类对象的实例化过程 子类对象使用new关键字要调用构造方法 调用构造方法时的顺序:先去调用父类中的构造方法(默认为无参构造),之后再调用子类中的构造方法。 调用构造方法的目的:为其内部的属性初始化 子类中的属性在没有完成父类中的构造方法之前,所有的内容都是默认值,整型是“0” 。 思考: 我们知道一个子类如果实现了一个接口则肯定要覆写接口中的全部抽象方法。那问?
8、是否可以采用一种方式,让子类可以有选择的去覆写自己真正需要的方法。 interface Door/开门public void openDoor();/关门public void closeDoor();/维修public void repairDoor();/拆除public void removeDoor();/锁门public void lockDoor();class D implements Door/子类现在肯定要覆写里面全部的抽象方法矛盾点: 子类不需要覆写全部的方法 如果子类直接实现了接口则肯定要覆写全部的方法 解决:如果中间加入了一个过渡端呢? 接口 - 过渡端 - 子类 |- 此过渡端不应该被直接使用。 - 抽象类 过渡端使用抽象类实现最合适,因为抽象类可以实现一个接口同时可以有一些抽象方
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1