java学习笔记(十)—— 抽象类、接口、内部类

在之前的学习中,父类其实就是子类的抽象了,比如老虎和兔子都可以被抽象成动物。抽象类是更进一步的抽象,而接口是在抽象类的基础上又抽象了一层。

一、抽象类和抽象方法

1.抽象方法只有方法名,没有方法体

//抽象类
public abstract class Person {
    //无参构造函数
    public Person(){
    }
    
    //有参构造函数
    public Person(String name){
    }
    
    //抽象方法
    public abstract void run();
    
    //非抽象方法
    public void sayHello(){
        System.out.println("hello,the last day of June");
    }
}

2.抽象类里可以没有抽象方法,但是只要该类包含一个抽象方法,那么这个类就是抽象类(that is to say,抽象类里可以有非抽象方法)。

3. 抽象类存在构造器(构造函数)吗?

有,并且有参无参都可以有。因为其子类实例化的时候要先调用父类的构造函数,也就是抽象类的构造函数,所以抽象类是有构造函数的。

4. 抽象类不能被实例化(虽然它有构造方法),只能作为其他类的父类

5. 但是由于类只能单继承的局限性,抽象类用的没有接口多接口可以实现多继承)。

6. 子类实现抽象类依然是extends关键字,子类必须实现抽象类的所有抽象方法

二、接口

1. 接口只能写“规范”,都是抽象方法,无法写具体的实现(不能出现非抽象的方法)。

java学习笔记(十)—— 抽象类、接口、内部类_第1张图片

2. 接口内的方法默认都是被“public abstract”修饰,可以不写;接口的属性默认都是被“public static final”修饰。but在抽象的时候一般只抽象方法,不会在接口里写属性。

3. 实现类用implements关键字,必须实现接口规定的所有方法

4. 接口没有构造函数,自然无法实例化(抽象类有构造函数,也不能实例化)。

5. 利用接口实现多继承。在下例中,当前类必须要实现UserService和TimeService的所有方法。

面试题:使用extends和implements的区别

1)extends只能单继承,implements可以实现多继承

2)extends子类不用重写所有的抽象方法,implements子类要重写所有的抽象方法。

三、内部类

为什么这个类要放在内部?因为就外部那个类自己用,别的类都不用。

概念不用硬记,可以后续慢慢了解

java学习笔记(十)—— 抽象类、接口、内部类_第2张图片

 1. 成员内部类

1)内部类如何实例化?

java学习笔记(十)—— 抽象类、接口、内部类_第3张图片

 2)内部类可以获得外部类的private属性

java学习笔记(十)—— 抽象类、接口、内部类_第4张图片

 2. 静态内部类

静态内部类不能获得外部类的private方法,因为静态类加载的时候id还没加载。

java学习笔记(十)—— 抽象类、接口、内部类_第5张图片

3. 局部内部类

在方法中的类

java学习笔记(十)—— 抽象类、接口、内部类_第6张图片

4.匿名内部类

java学习笔记(十)—— 抽象类、接口、内部类_第7张图片

你可能感兴趣的:(JavaSE,java,学习,开发语言)