封装
- 隐藏该隐藏的,暴露该暴露的。(尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。)
- private 修饰,用get set实现对属性的操作
- 总结:
- 不可以直接访问属性,仅可访问公共方法;
get/set
方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检验和过滤。
继承
- 继承,是
类与类
之间特征和行为的一种赠与或获得。
- 两个类之间的继承关系,必须满足
is a
的关系。
- Dog is an Animal;
- Cat is an Animal。
//继承语法
class 子类名 extends 父类 { //定义子类时,指定其父类
//属性
//构造方法
//方法
}
- Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。
- 访问控制修饰符

- 当父类提供的方法无法满足子类需求时,可重写。
- 方法重写的原则:方法名称、参数列表、返回值类型必须与父类相同;访问修饰符可与父类相同或是比父类更宽泛。
- 重写后,调用先调用子类重写方法
- 代表父类对象
- 继承中对象创造
- 代表父类构造方法 supe() 在首行
- 在子类方法中使用
super.
的形式访问父类的属性和方法; - 在子类的构造方法的首行,使用
super()
或super(参数)
,调用父类构造方法。 - 如果子类构造方法中,没有显式定义
super()
或super(参数)
,则默认提供super()
; - 同一个子类构造方法中,
super()
、this()
不可同时存在。
多态
- 多态指的是多种形态,父类引用指向子类对象,从而产生多种形态。
-
/*
* "="左侧,父类引用
* "="右侧,子类对象
*/
Animal a = new Dog();
- 父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法;
- 子类对象赋值给父类引用,如果运行被重写的方法,实际运行的是子类中的方法。
-
多态的应用
* 之前存在的问题 -- 针对不同的类型要写特定的方法单独进行处理,产生代码冗余 -- 有一个方法可以兼容多种类型
* 1) 父类作为方法的参数,实现多态 -- 方法的参数可以兼容所有的子类对象
* 2) 父类作为方法的返回值类型,实现多态
-
//完成animal特有的动作 -- 向下转型
/*
* 向下转型
* 1. (类型)引用
* 2. 可能存在的问题 java.lang.ClassCastException 类型转换异常
* 3. 如何解决2的问题 -- 转换之前先判断引用代表的对象本质上是什么类型 -- 如何判断?
* 引用 instanceof 类型
* 返回值
* |-- true 引用是后面的类型
* |-- false 引用不上后面的类型
* */
-
if(animal instanceof Dog) {
Dog d = (Dog)animal;
d.bark();
d.eat();
} else if(animal instanceof Cat) {
Cat c = (Cat)animal;
c.catchMouse();
c.eat();
} else {
animal.eat();
}
public Animal send(String name) {
switch (name) {
case "dog":
return new Dog();
case "cat":
return new Cat();
default:
return new Dog();
}
}