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关键字,如果子类不加abstract关键字必须实现抽象类的所有抽象方法,如果子类加了abstract那么可以一个都不实现

二、接口

1. 重要理解,接口实现的是can-do

2. 接口只能写“规范”,都是抽象方法,无法写具体的实现(不能出现非抽象的方法)(新版JDK可以在接口里写方法体了!)。

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

3. 实现类用implements关键字,必须实现接口规定的所有方法(但是新版JDK可以不实现所有方法了!

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

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

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

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

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

面试题:java 实现多个implements,但是有同名方法怎么办?

经过我的测试

  • 当两个方法返回值相同,参数也相同时,编译器会当做一个方法,实现类只需要重写一次就行,并且不会出错
  • 当参数相同,返回值不同时,编译器报错(我猜编译器去匹配应该调用哪个方法的时候,只看方法名和参数类型及个数,根本不看返回值。也就是说如下图所示,如果我们在程序里写了new Test.same(),编译器会犯嘀咕,到底应该调用返回值是void的方法还是调用返回值是int的方法呢?程序员也没说明白啊。所以直接报错,交给程序员自己去解释清楚!重写也是这样,返回值不同的不叫重写!

  • 当参数不同,返回值相同时,当做两个方法,分别重写
  • 当参数和返回值都不同时,当做两个方法,分别重写

根本就和返回值类型没关系:

  • 当参数相同时,当做同一个方法
  • 当参数不同(形参个数不同或者个数相同类型不同)时,当做两个方法

但是考虑一种情况:

  • 当参数相同,返回值不同时,报错!

三、内部类

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

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

 1. 成员内部类

1)内部类如何实例化?

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

 2. 静态内部类

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

3. 局部内部类

在方法中的类

4.匿名内部类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值