java学习笔记——抽象类和接口

一、抽象类

类的设计应该保证父类和子类能够共享特征,有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。

1 抽象类:在class前面加 abstract

特点:

  • 抽象方法所在的类必须是抽象类
  • 抽象类不能实例化
  • 抽象类是用来被继承的,如果要实现抽象类,必须创建一个子类去继承抽象类
  • 子类继承一个抽象类,必须重写抽象类中所有的抽象方法(子类也是抽象类除外),重写父类方法的快捷键 ctrl + i
  • 抽象类里面可以定义普通方法
  • 抽象类里面可以定义构造方法,如果不能定义构造方法,也就代表不能使用object里面定义的方法和属性了
  • abstract不能用来修饰属性、构造器、private、static、final

2 抽象方法特点:只有方法的定义,没有方法的实现
例:public abstract void eat();

3 匿名对象 匿名类 抽象类的匿名方法

public class TestPerson {
    public static void main(String[] args) {
        Person person = new Student();
        method(person);// 非匿名对象非匿名类

        method(new Student());// 匿名对象,只能被调用一次
        // 其实是new了一个子类,只是这个子类没有名字
        // 创建了一个匿名子类的对象person1
        Person person1 = new Person() {
            @Override
            public void eat() {
                System.out.println("人在吃饭");
            }

            @Override
            public void sleep() {

            }
        };
        person1.eat();

        // 匿名子类最简单的写法 匿名子类,匿名对象
        method(new Person() {
            @Override
            public void eat() {
                System.out.println("hahhahah");
            }

            @Override
            public void sleep() {

            }
        });
    }
    public static void method(Person person){
        System.out.println("学生");
    }
}

4 抽象类 vs 一般类

相同点:

  • 抽象类和一般方法都是用来描述事物的,都在内部定了成员

不同点:

  • 一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足
  • 一般类中不能定义抽象方法,只能定义非抽象方法;抽象类中可定义抽象方法,同时也可以定义非抽象方法
  • 一般类可以被实例化;抽象类不可以被实例化

二、接口

1.接口是什么?

  • 就是多个类之间的公共规范
  • 接口的出现就是为了解决java单继承的问题,java不支持多继承
  • 接口里面的方法都是抽象方法,它相当于一个特殊的抽象类

2.怎么定义一个接口

  • public interface 接口名{}

3 接口的作用

  • 通过接口可以实现不相关类的相同行为,不需要考虑类之间的层次关系
  • 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
  • 可以使处于不同层次甚至互不相关的类具有相同的行为
  • 接口主要用来定义规范,解除耦合关系

4.接口的特点

  • (1)接口里面成员变量都是常量,默认会加上public static final进行修饰,不写也会默认
  • (2)接口里面的方法都是抽象方法(默认方法除外),默认会加上public abstract进行修饰
  • (3) 接口不能实例化,抽象类通过继承实现,接口通过创建一个类去实现这个接口
  • (4)接口里面不能定义普通方法,可以定义默认方法
  • (5)接口里面没有构造方法
  • (6)一个接口可以继承一个接口,并且可以继承多个接口

5.实现类

  • (1)实现接口的类叫做实现类,格式:class 类名 implements 接口名{}
  • (2)实现类要重写接口里面所有的抽象方法(实现类是抽象类除外)
  • (3)一个实现类可以实现多个接口,每个接口之间用","隔开
  • (4)如果一个类在继承一个类的同时实现一个接口,那么继承要放到接口实现的前面

6.接口和抽象类的相同点和不同点(面试题)

相同点:

  • 接口和抽象类都不能被实例化,只能被其他类实现和继承
  • 接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这些抽象方法,否则实现的类就是抽象类
  • 都可以定义静态方法

不同点:

  • 抽象类与接口的定义不同:抽象类 abstract ,接口 interface
  • 接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通方法
  • 接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量
  • 接口不包含构造函数;抽象类可以包含构造方法,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作
  • 接口不包含初始化块,但抽象类可以包含初始化块
  • 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补java的单继承不足

7 补充

  • 因为有几个类需要单独实现一些方法的情况,所有对接口进行了升级,从1.8开始,接口里面允许定义默认方法,主要为了接口升级:public default 返回值类型 方法名(形参){方法体;},默认方法会被实现类继承
  • 从1.8开始,接口里面允许定义静态方法:public static void metnod(){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值