java三大特性

2016-06-04  本文已影响0人  谢审言_shen

继承性

在子类的构造函数中必须用super()调用父类的构造方法

关联:函数的复写(override),覆盖。Super()与this的用法。

1.抽象类不能生成对象。

2.抽象类中可以没有抽象函数。

3.抽象类中的构造函数在子类中用super()调用。

4.抽象函数必须声明在抽象类中。

5.抽象函数abstract void fun(); 只有函数定义无方法体,如在子类中没有进行复写(override),会进行报错。

为什么使用抽象类?
如果一段代码在语义上有错误,那么在语法上也应该是有错误的。(在努力实现的)。

设计模式之工厂方法模式

有两个子类HPPrinter&CannonPrinter继承接口Printer。在test类中实现那个打印机。

 class test{
  public static void main(String args[]){
       Printer printer = null;
       int flag = 1;
       if(flag == 0){
             printer = new HPPrinter();
       }
       else if(flag == 1){
             printer = new CannonPrinter();
       }
       printer.open();
       printer.print("test");
       printer.close();
  }
}

问:若新增一个同方打印机,在test类中需重新增加循环语句,将同方类的对象赋值给Printer的引用printer。重复代码过多,如何解决???
//主要代码功能:根据用户选择(根据用户选择是参数)生成打印机的对象,并向上转型为打印机类型(类型为打印机类型)。
//printer getPrinter(int flag);

  class PrintFactory{
  public static printer getPrinter(int flag){
       Printer printer = null;
       int flag = 1;
       if(flag == 0){
             printer = new HPPrinter();
       }
       else if(flag == 1){
             printer = new CannonPrinter();
       }
       return printer;
  }
}

生成HP Cannon两个类的对象时,不是直接new()而是把生成这两个对象的代码直接封装在PrintFactory类中的getPrinter()方法中,当我们使用时直接在test类中直接调用getPrinter();

public static void main(String args[]){
       int flag = 1;
       Printer printer = PrintFactory.getPrinter(flag);
       printer.open();
       printer.close();
       }

封装性

private(私有) 本类
default(默认) 本类 当前包中
protect(只能修饰成员变量和成员函数) 本类 当前包 其他包类(只有两个类有extends关系时,允许跨包访问)
public 本类 当前包 其他包子类 所有类

多态性

1.对象的向上转型:将子类对象赋值给父类的引用
Student S = new Student(); Person P = S;
也可写为:Person P = new Student();
一个引用能调用那些成员变量和成员方法,取决于引用的类型。
一个引用具体调用哪个成员方法,取决于引用所指的对象
2.对象的向下转型:父类对象赋值给子类的引用
Person P = new Person(); Student S =(Student)P;

联想:强制类型转换


end

上一篇 下一篇

猜你喜欢

热点阅读