• Java宝典-抽象类和接口



    铁汁们好,今天我们学习抽象类和接口~

    1. 抽象类

    1.1 抽象类的概念

    什么是抽象类?在面向对象中,如果一个类中的信息并不能完整地描述一个对象,这样的类就是抽象类,拿我们之前的例子:
    在这里插入图片描述

    Dog类和Cat类继承了Animal类,Animal中有eat方法,但是猫除了吃,还能抓老鼠,如果在Animal中加上抓老鼠的方法,那么狗继承了Animal,也就是说狗也能抓老鼠,这显然有点不现实,所以Animal并不能完整的描述一个对象,此时我们可以把它设计成抽象类,那么如何设计?

    1.2 抽象类的语法

    当一个类被abstract关键字修饰时,这个类就是抽象类

    abstract class Animal{
    	//...
    }
    
    • 1
    • 2
    • 3

    注意事项:
    1.抽象类中可以包含普通的方法和属性,也可以包含构造方法
    2.如果一个方法被abstract修饰,表示该方法是抽象方法,抽象方法不能有具体的实现,如

    abstract class Animal{
    	public abstract void func();
    }
    
    • 1
    • 2
    • 3

    1.3 抽象类的特点

    抽象类有以下特点:

    1. 抽象类不能实例化:不能通过new来进行实例化
    Animal animal = new Animal();
    //错误的,抽象类不能实例化
    
    • 1
    • 2
    1. 抽象类中的抽象方法不能是private修饰的

    2. 抽象类中的抽象方法不能有具体实现,是因为抽象类的作用主要是被继承,子类需要重写抽象类中的抽象方法

    abstract class Animal{
    	public abstract void func(){}//错误的,花括号就表示这个方法有具体实现
    }
    
    • 1
    • 2
    • 3
    1. 抽象方法不能是final和static修饰的(因为要被子类重写)
    2. 抽象类中可以没有抽象方法,但是抽象方法一定是在抽象类当中才能出现

    2. 接口

    2.1 接口的概念

    接口是啥?在java中,可以认为是很多个类的公共规范,接口是一种引用数据类型.比如USB接口,安卓充电器接口,这些接口都是统一大小的,只要符合规范,大家都能使用它.

    2.2 接口的语法

    在java中,接口的定义和类的定义格式比较类似,将class替换成interface关键字即可

    public interface 接口名{
    //....
    }
    
    • 1
    • 2
    • 3

    2.3 接口的特点

    1. 接口也不能实例化
    2. 接口中的方法都是抽象方法,是被public abstract修饰的,不能被其他修饰符修饰
    3. 接口中的方法不能有具体实现,只有加了default或者static的方法才能实现
      例如:
    interface IA {
        static void fun1() {
            System.out.println("static");
        }
        default void fun2() {
            System.out.println("default");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 接口中的成员变量默认是public static final修饰的,所以必须赋初始值
    2. 接口中的方法和变量一般不加修饰符,这样代码更加美观,清晰
    interface IA {
        int A = 10;
        void func();
    }
    
    • 1
    • 2
    • 3
    • 4
    1. 接口中不能出现静态代码块/构造方法/实例代码块
    2. 重写接口中的方法时,重写的方法只能是public的
    3. 当一个类需要实现某个接口时,使用implements关键字,而且这个类必须重写接口的方法
    interface IA {
        int A = 10;
        void func();
    }
    class A implements IA{
        @Override
        public void func() {
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4 实现多个接口

    java中不能有多继承(一个类继承多个类),但是一个类可以实现多个接口,接口很好的解决了java不能多继承这个问题

    interface IA {
        //...
    }
    
    interface IB {
        //...
    }
    
    class A implements IA, IB {
        //...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.5 接口的继承

    接口之间也可以继承,接口之间的继承同样使用extends

    interface IA {
        //...
    }
    
    interface IB extends IA {
        //...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 接口使用案例

    父类Animal(抽象类)

    public abstract class Animal {
        protected String name;
        protected int age;
        public Animal(String name, int age) {
            this.age = age;
            this.name = name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    IFly接口

    public interface IFly {
        void Flying();
    }
    
    • 1
    • 2
    • 3

    IRunning接口

    public interface IRunning {
        void Running();
    }
    
    • 1
    • 2
    • 3

    子类(实现了IFly, IRunning接口,并且重写了接口中的方法)

    public class Duck extends Animal implements IFly, IRunning {
        public Duck(String name, int age) {
            super(name, age);
        }
        @Override
        public void Flying() {
            System.out.println(this.name + "正在飞");
        }
        @Override
        public void Running() {
            System.out.println(this.name + "正在跑");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    docker基础命令操作---容器操作
    学会这个视频压缩技巧,实现顺利发送大视频
    六级备考24天|CET-6|翻译技巧1&2|理解背诵|11:00~12:00+14:20~15:30
    【Rust 日报】2022-09-18 Linus提议将Rust添加到Linux6.1内核
    JAVA数据类型与变量
    多普勒频率相关内容介绍
    Go2Shell安装在 Finder 中打开当前目录的终端窗口
    Leetcode 【1155. 掷骰子等于目标和的方法数】
    分库分表一:ShardingSphere介绍和入门实战
    C语言的多级指针的上限及实现方法
  • 原文地址:https://blog.csdn.net/QUIXOTIC_/article/details/136481178