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

3.4、泛型