1、封装
定义:把具有相同属性的事物封装成类,把某些信息隐藏在类中(Private),不能够直接调用,要通过公开的方法才能获取和操作。
修饰符 | 类 | 包内 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
private | √ | × | × | × |
default | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
2、继承
定义:从已有的类中派生出的新类。能够吸收已有类的属性和行为,并且能够扩展新的行为,称子类继承父类
-
通过extends关键字继承
-
只能继承父类的protected和public方法
-
子类实例化对象会先调用父类构造方法
-
继承的属性寻值遵循就近原则
-
super指父类
-
this指当前类
3、多态
相同对象在不同时刻表现出来的不同状态。
- 多态的前提
- 继承或实现关系
- 方法的重写
- 父类引用指向子类对象
3.1、继承
public class Demo {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
//变量 编译看左边 运行看左边
//方法 编译看左边 运行看右边
Animal animal = new Dog();
System.out.println(animal.a);
dog.eat();
cat.eat();
test(dog);
}
public static void test(Animal animal){
animal.eat();
}
}
class Animal{
int a =10;
public void eat(){
System.out.println("喝");
};
public Animal() {
}
}
class Cat extends Animal{
int a = 20;
@Override
public void eat() {
System.out.println("猫吃");
}
}
class Dog extends Animal{
int a = 20;
@Override
public void eat() {
System.out.println("狗吃");
}
}
特点
- 变量
- 编译看父类,运行看父类
- 方法
- 编译看父类,运行看子类
1)向上转型
父类引用指向子类对象
Animal animal = new Dog();
2)向下转型
子类引用指向夫类对象,需要强转
Dog dog = (Dog) new Animal();
3) instanceof
判断两个类是否是同一类型,或者是否有继承关系
3.2、抽象类
在对具有同一特征的对象抽取相同属性的时候,有些行为在父类中无法具体属性,这个时候就需要抽象。
-
关键字 abstract
-
抽象类中不一定有抽象方法
-
抽象方法一定在抽象类里
-
抽象类不能实例化
-
通过继承来使用
3.3、接口
公共规范的标准,一套规则,用来定义规范和功能的扩展
- 关键字 implements
- 通过被实现来使用
- 方法默认抽象
- 可以有静态常量 static final
- 可以有抽象方法
- 私有方法 java9
- 默认方法和静态方法 java8