第四天01

面向对象编程

构造方法(构造器)

类中的构造器也叫构造方法,是进行创建对象的时候必须调用的,用来初始化值。

  • 一个类即使什么都不写,也存在一个构造方法。

  • 构造方法必须和类的名字相同

  • 必须没有返回值类型,也不能写void

  • 有参构造一旦定义,如果还想使用无参构造就必须将其显示定义

  • alt+Insert 快捷生成构造器

封装

通常,应禁止直接访问一个对象中的数据表示,而应通过操作接口来访问

  • 属性私有 private
  • get/set 被外界调用 set 中可进行一些数据限制 alt+Insert 快捷生成

继承

  • 在Java中,所有的类,都默认直接或间接继承Object类
  • Java中类只有单继承,子类继承父类,使用关键字extends
  • ctrl +H 查看继承树

super 和this

  • super ( ) 调用父类的构造方法,必须在构造方法的第一个
  • super 必须只能出现在子类的方法或构造方法
  • super 和 this 不能同时调用构造方法!

  • 代表的对象不同 this:本身调用者这个对象; super:代表父类对象的引用
  • 使用前提 this:没有继承也可使用 ; super:只能在继承条件下才能使用
  • this( ) 本类的构造方法 super()父类的构造方法

重写

  • 前提
  1. 需要继承关系,子类重写父类的方法
  2. 方法名必须相同
  3. 参数列表必须相同
  4. 修饰符:范围可以扩大但不能缩小 public > protected > default > private
  5. 抛出的异常: 范围可以缩小但不能扩大
  • 重写,子类的方法和父类方法只有方法体不同
  • 重写的作用 父类的功能,子类不一定需要,或不一定满足
  • alt + Inset override 快捷重写

多态

  • 一个对象的实际类型是确定的,但其可以指向的引用类型就不确定:父类的引用指向子类Person s = new Student;

  • 多态是方法的多态,属性没有多态

  • 存在条件:继承关系;方法需要重写;父类引用指向子类对象!


package oop.demo2;

public class Person {
    protected void run(){
        System.out.println("RUN!");
    }
}

package oop.demo2;

public class Studet extends Person{
    @Override
    protected void run() {
        System.out.println("Student");
    }
    public void eat(){
        System.out.println("EAt");
    }
}

package oop.demo2;

public class RunMain {
    public static void main(String[] args) {
        //Student 能调用的方法都是自己的或是继承父类的
        Studet s1 = new Studet();
        //Person 父亲类 可以指向子类  但是不能调用子类独有的方法 如 eat()不可调用
        Person s2 = new Studet();       // 父类的引用指向子类
        s1.run();
        s2.run();        //子类重写了父类的方法,执行引用指向子类的方法
        //对象能执行的方法,主要看左边的类型
        s1.eat();

    }
}

注意点

  • static 方法,属于类,不属于实例,无法被重写
  • private 方法 私有的,也无法重写
  • final 常量 不可改变

instanceof

x instanceof y 它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

类型之间的转化

子类转化为父类

父类强转为子类 向下转型 强制转换 可能丢失自己的本来的一些方法

posted on 2021-03-06 23:00  峰风峰  阅读(39)  评论(0编辑  收藏  举报