11)面向对象(2)

Java面向对象(2)

封装

  • 该露的露,该藏的藏

    ​ 我们程序设计要追求高内聚,低耦合

    ​ 高内聚:就是类内部的数据操作细节自己完成,不允许外部干涉。

    ​ 低耦合:尽量暴露少量的方法给外部使用。

  • 属性私有:private

  • get/set:获取或者更改private属性。

    public class Student{
        //属性私有
        private int age;
        //get
        public int getAge() {
            return this.age;
        }
        //set
        public int setAge(int age) {
            this.age = age;
        }
    }
    

封装的意义:

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统的可维护增加了

继承

继承的本质事对某一批类的抽象,从而实现对现实世界的更好的建模。

extends:拓展

  • Java中只有单继承,没有多继承。

  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。

  • 私有的是无法继承的。

  • Java中,所有的类,都默认直接或者间接继承object类。

public class Person {
    public void say() {
        System.out.println("说话");
    }
}
public class Student extends person{
    
}
public class Demo1 {
	public static void main() {
        Student student = new Student();
        //可以使用父类方法。
        student.say();
    }
}

idea:ctrl + H 派生树。

修饰符中的范围大小:

public protected default private

super类详解

本方法的范围内 :变量名/方法名

本类的范围内:this.变量名/方法名

父类的范围内:super.变量名/方法名

  • new一个子类的对象,首先会调用父类构造器。父类构造器的调用必须在子类构造器的第一行,默认为隐藏。

super注意点:

  1. super调用父类的构造方法,必须在构造放法的第一个。
  2. super必须只能出现在子类的方法或者构造方法中。
  3. super和this不能同时调用构造放方法。

方法的重写

静态的方法和非静态的方法差别很大。

子类类型 new 子类

父类类型 new 子类

其中第二个方式会发生两种情况:

当方法为静态方法时,父类的引用指向子类,调用只和类型有关(尽量不用)

当方法为非静态时,父类的引用指向子类,子类重写了父类的方法

重写

需要有继承关系,子类重写父类的方法

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大
  4. 抛出异常:范围,可以被缩小,但是不能扩大。

多态

  • 可以实现动态编译类型

多态注意事项:

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系 类型转换异常 ClassCastException
  3. 存在条件:继承关系,方法需要重写,父类的引用指向子类对象

instanceof(类型转换)引用类型 判断类型

System.out.println(X instanceof Y); 编译能否通过取决于 X和Y是否有父子关系。

tips:

  1. 父类引用指向子类的对象。
  2. 把子类转化为父类,向上转型。(会丢失子类的一些方法)
  3. 把父类转换为子类,向下转型,强制转换。
  4. 方便方法的调用,减少重复代码。
posted @ 2022-09-18 17:56  winter8  阅读(26)  评论(0)    收藏  举报