1. 封装

    定义:

    封装是面向对象方法的重要原则,把对象的属性和操作(服务)结合为一个独立整理,并尽可能隐藏对象的内部实现细节。

    好处:

  • 良好的封装能够减少耦合;
  • 类内部结构自由修改;
  • 对成员进行精确控制;
  • 隐藏信息,实现细节。

    1. public class BookComponent {
    2. private String name;
    3. private String writer;
    4. public String getName() {
    5. return name;
    6. }
    7. public void setName(String name) {
    8. this.name = name;
    9. }
    10. public String getWriter() {
    11. return writer;
    12. }
    13. public void setWriter(String writer) {
    14. this.writer = writer;
    15. }
    16. @Override
    17. public String toString() {
    18. return "BookComponent{" +
    19. "name='" + name + '\'' +
    20. ", writer='" + writer + '\'' +
    21. '}';
    22. }
    23. }
  1. 继承

    定义:

    关键字:extends,继承是面向对象最显著的特性。继承是从已有的类中派生出新class,新class能调用已有class的属性和方法,并可以扩展性的属性和方法。如:class Male extends persion{};

    特点:

  • 继承关系是传递的,若class C extends class B,class B extends A(多层继承),则class C既有从class B那里继承下来的属性和方法,也有从class A那里继承下来的属性和方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是class C的属性和方法。继承是在一些比较一般的class 的基础上构造、建立和扩充新class的最有效的手段;
  • 提高代码复用性,若class B extends class A,那么只需要在class B中建立与基类(class A)不同的属性和方法即可,这样可以减少代码的冗余,大大增加程序的重用性;
  • Java只支持单继承,不支持多继承,一个class只能有一个父类。

    super与this区别

  1. super用于基类class,this用于本class中;
  2. super用于子class调用父类方法,this用于同一类内调用其他方法;
  3. super是Java的一个关键字,this是一个指向本对象的指针。

    内部类

    定义:

    将一个class定义在另一个class里面,里面的class就称为内部类。内部类的出现,打破Java单继承的局限性。

    特点:

  • 内部类可以直接访问外部类的成员(成员包括:属性(成员变量)和方法,以下成员意思一样),包括私有成员;
  • 外部类如果要访问内部类的成员,必须new一个内部类对象。
  1. 多态

    定义:

    是面向对象三大特征之一,同一行为,通过不同的子类,体现不同的形态。指同一个方法调用,由于对象不同,可能会有不同的行为。如:调用人的“休息”,张三是睡觉,李四是旅游,王五是听音乐;同样如:调用人的“吃饭”,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。
    编译器类型是指“=”左边的类型,运行期指“=”右边类型。当有继承关系存在是,可能发生编译器类型和运行期类型不同的情况,即编译器是父类类型,运行期是子类类型。父类引用指向子类对象,声明父类new子类。

    要点:

  • 多态是方法的多态,不是属性的多态(多态与属性无关);
  • 多态的三个必要条件:继承,重写,父类引用指向子类对象;
  • 父类引用指向子类对象后,用该父类调用子类重写方法后,此时就会出现多态。 ```java public class Rest {

    public void rest(){

    1. System.out.println( "Rest基类休息");

    } } public class zhangsan extends Rest {

    public void rest(){

    1. System.out.println( "张三休息方式是睡觉" );

    } } public class lisi extends Rest {

    public void rest(){

    1. System.out.println( "李四休息方式是旅游" );

    } }

public class wangwu extends Rest {

  1. public void rest(){
  2. System.out.println( "王五休息方式是听音乐");
  3. }

}

public class Test {

  1. public static void main(String[] args) {
  2. Rest rest = new Rest();
  3. rest.rest();
  4. Rest zhangsan = new zhangsan();
  5. zhangsan.rest();
  6. Rest lisi = new lisi();
  7. lisi.rest();
  8. Rest wangwu = new wangwu();
  9. wangwu.rest();
  10. }

} ``` 运行结果:
image.png

向上转型

子类对象赋给父类引用,称为向上转型(upcasting),自动类型转换;Rest zhangsan = new zhangsan();

向下转型

  • 父类引用转换为子类类型,称为向下转型(downcasting),强制类型转换;Zhangsan downcasting = (Zhangsan) rest;
  • 必须转换为真实子类型,否则报ClassCastException;
  • 向下转型之前一定发生了向上转型;
  • 为了避免ClassCastException,向下转型之前使用instanceof判断。

    重载和重写

    定义:

    Overload:重载,Override:重写;重载表示同一个class中有多个相同名称的方法,但是这些相同名称的方法的参数列表不同(如:参数个数,参数类型,顺序不同);重写表示子类方法与类型某个方法的方法名与参数列表完全相同,通过子类创建的实例对象调用该方法时,将调用子类中定义的方法。

    重载特点:

  • 存在于同类中;

  • 方法名相同,方法返回值,参数列表(参数个数,参数类型,参数顺序都不同);
  • 不能重载只有返回值不同的方法;
  • 可以有不同的访问修饰符,抛出不同的异常。

    重写特点:

  • 返回类型必须与基类方法返回类型相同;

  • 访问修饰符权限一定要大于被重写方法的访问修饰符;
  • 重写方法一定不能抛出新的检查异常或比被重写的方法声明更加宽泛的检查型异常;如:基类方法抛出IOException,子类方法就不能抛出Exception,只能抛出IOException异常。
  • 被覆盖的基类方法不能是private的,否则只能算是子类重新定义了一个方法,并没有对其覆盖。