zoukankan      html  css  js  c++  java
  • 抽象类、接口

    抽象类+接口

    一、抽象类

    1.1 什么是抽象类?

    一个类中没有足够的信息来描绘一个具体的对象的类就是抽象类。

    1.2 抽象类的特点?

    1. 抽象类中的可以存在抽象方法和非抽象方法。
    2. 抽象类不能被实例化。

    1.3 抽象方法

    1. 抽象方法没有方法体。
    2. 抽象方法只能中存在抽象类

    1.4 抽象类与抽象方法定义:

    抽象类的定义格式

    abstract class 类名字 { 
    
    }
    

    抽象方法定义格式:

    修饰符 abstract 返回值类型 方法名 (参数列表);
    

    代码示例:

    public abstract class A(){//抽象类
        public abstract void show(); //抽象方法
    }
    

    1.5 注意事项:

    关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。

    抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

    理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

    抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

    理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

    抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

    理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

    面试题

    一个类可以继承几个父类?(一个,java是单继承语言,但可以多层继承。)


    二、接口

    2.1 概述

    接口是java中的一种引用数据类型,是方法的集合。 果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。

    2.2 接口的定义

    接口的定义类似于类的定义,使用的关键字是interface,也会被编译成.class文件,但需要明确它不是类,而是另外一种数据类型。

    引用数据类型:数组、类、接口 接口不能创建对象,但可以被实现,(implements关键字),一个实现接口的类,需要实现接口中的所有的抽象方法,创建实现类的对象,就可以调用这些方法。

    2.3 接口的定义

    public interface 接口名称{
        //抽象方法
        //默认方法
        //静态方法
        //私有方法
    }
    

    抽象方法:使用abstract关键字修饰,可以省略,没有方法体。该方法供子类实现。

    默认方法:使用default修饰,不可省略,供子类调用或重写。

    静态方法:使用abstract关键字修饰,不可省略,供接口直接调用。

    私有方法:使用private关键字修饰,供接口中默认方法或静态方法使用。

    示例:

    public interface InterfaceName{
        public abstract void method();//抽象方法
        public default void method() {//默认方法
            // 执行语句
        }
        public static void method2() {//静态方法
            // 执行语句
        }
        private void method() {//私有方法
            // 执行语句
        }
    
    }
    

    2.3 接口的实现

    接口与类为实现关系,接口的实现与类的继承相似,使用implements关键字。 非抽象子类实现接口:必须重写接口中所有抽象方法。

    格式:

    class 类名 implements 接口名 {
        // 重写接口中抽象方法【必须】
        // 重写接口中默认方法【可选】
    } 
    

    示例: 接口的定义:

        public interface LiveAble {
        // 定义抽象方法
        public abstract void eat();
        public abstract void sleep();
        }
    

    定义实现类:

        public class Animal implements LiveAble {
        @Override
        public void eat() {
            System.out.println("吃东西");
        }
    ​
        @Override
        public void sleep() {
            System.out.println("晚上睡");
        }
    }
    

    测试类:

    public class InterfaceDemo {
    public static void main(String[] args) {
    // 创建子类对象  
    Animal a = new Animal();
    // 调用实现后的方法
    a.eat();
    a.sleep();
    }
    }
    

    2.4 接口的多实现

    一个类可以实现多个接口并且,一个类能继承一个父类,同时实现多个接口。

    在继承体系中,一个类只能继承一个父类。

    格式:

    class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
        // 重写接口中抽象方法【必须】
    }
    

    [extends 父类名 ]: 表示可选操作。如果有继承,必须放在实现的前边。

    2.5 接口的多继承

    一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继承父接口的方法。代码如下:

    定义父接口:

    interface A extends B{
        public void method();
    }
    ​
    interface B {
        public  void method1();
    }
    

    定义子接口:

    interface D extends A{
    @Override
    public void method() {
        System.out.println("DDDDDDDDDDDDDD");
    }
    
        @Override
        public void method1() {
            System.out.println("EEEEEEEEEEEEEEE");
        }
    }
    

    2.6 抽象类和接口的区别 :

    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。

    • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。

    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    ----------------------------------------今天总结到此结束--如有不错误之处望指正--------------------------------------------、

  • 相关阅读:
    使用一行Python代码从图像读取文本
    FastAI 简介
    OpenCV-Python 轮廓:更多属性 | 二十四
    Numpy和OpenCV中的图像几何变换
    从云计算到边缘计算
    OpenCV-Python 轮廓属性 | 二十三
    c# GetType()和typeof()的区别
    C# 子类父类方法同名,三种处理方式
    C# string 与 String的区别
    decimal
  • 原文地址:https://www.cnblogs.com/ldd525/p/10522167.html
Copyright © 2011-2022 走看看