第四天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()父类的构造方法
重写
- 前提
- 需要继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小 public > protected > default > private
- 抛出的异常: 范围可以缩小但不能扩大
- 重写,子类的方法和父类方法只有方法体不同
- 重写的作用 父类的功能,子类不一定需要,或不一定满足
- 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 的数据类型。
类型之间的转化
子类转化为父类
父类强转为子类 向下转型 强制转换 可能丢失自己的本来的一些方法