• JAVA基础知识|抽象类与接口类


    一、抽象类

    抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明

    抽象方法:没有方法体的方法,必须要使用abstract修饰

    为什么要使用抽象类,抽象方法?

    举例来说,如果你定义了一个类Person,此类中包含很多公共属性和方法。但是其中有一个方法,每个子类实现的方式都不同。比如“吃饭”这个方法,Child类中,“吃饭”使用勺子”,Adult类中,“吃饭”使用筷子。那么我们就在Person类中把这个方法定义好,就毫无意义。

    public abstract class Person {
    
        //身高
        public double height;
        //体重
        public double weight;
        //年龄
        public int age;
        //名字
        public String name;
    
        //跑步
        public void run() {
            System.out.println("==跑步==");
        }
    
        //吃饭
        public abstract void eat();
    }
    View Code
    public class Child extends Person {
    
        //构造函数
        public Child(String name, double height, double weight, int age) {
            this.height = height;
            this.weight = weight;
            this.name = name;
            this.age = age;
        }
    
        //无参构造函数
        public Child() {
        }
    
        //吃饭
        @Override
        public void eat() {
            System.out.println("==用勺子吃饭==");
        }
    }
    View Code
    public class Adult extends Person {
    
        //构造函数
        public Adult(String name, double height, double weight, int age) {
            this.height = height;
            this.weight = weight;
            this.name = name;
            this.age = age;
        }
    
        //无参构造函数
        public Adult() {
        }
    
        //吃饭
        @Override
        public void eat() {
            System.out.println("==用筷子吃饭==");
        }
    }
    View Code

    抽象类与普通类的区别?

    1)抽象类中的抽象方法必须声明为public或protected类型,如果声明为private或者friendly类型,子类不能继承使用,没有意义

    2)抽象类不能创建对象,Person person = new Person();

    3)如果子类继承了抽象类,则必须实现抽象类中的抽象方法。如果不实现,则必须将子类也声明为抽象类

    二、接口

    接口:在Java编程语言中是一个抽象类型,是抽象方法的集合

    接口并不是类,虽然写法很相似。类描述对象的属性和方法,接口则包含类要实现的方法

    接口表现的是一种能力,如果类实现了接口,表明这个类也具备了接口所要表现的能力

    接口特性:

    1)接口中的所有方法都是抽象方法,默认修饰符是public abstract(也只能是public abstract)

    2)接口中也有变量,默认修饰符是public static final(也只能是public)

    3)接口可以继承接口,而且可以多继承

    三、抽象类与接口区别

    语法区别:

    1)抽象类中可以有非抽象方法,接口中的方法必须都是抽象方法

    2)抽象类中的变量可以是各种类型的,接口中的变量只能是public static final类型的

    3)抽象类中可以有静态代码块和静态方法,接口中不可以

    4)一个类只可以继承一个抽象类,但是可以实现多个接口

    设计区别:

    抽象类是对一种事物的抽象,即对类抽象。而接口是对行为的抽象。

    抽象类是对整个类整体进行抽象,包括属性行为,但是接口却是对类局部(行为)进行抽象。

    举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。

    从这里可以看出,继承是一个 “是不是”的关系,而接口实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

  • 相关阅读:
    zw版【转发·台湾nvp系列Delphi例程】HALCON MoveRectangle
    zw版【转发·台湾nvp系列Delphi例程】HALCON SetIcon1
    zw版【转发·台湾nvp系列Delphi例程】HALCON SetIcon2
    zw版【转发·台湾nvp系列Delphi例程】HALCON DispArc
    zw版【转发·台湾nvp系列Delphi例程】HALCON HSerializedItem
    zw版【转发·台湾nvp系列Delphi例程】HALCON union1
    zw版【转发·台湾nvp系列Delphi例程】HALCON SqrtImage
    zw版【转发·台湾nvp系列Delphi例程】HALCON SubImage
    zw版【转发·台湾nvp系列Delphi例程】HALCON SetWindowExtent
    Raphael绘制圆圈环绕方法
  • 原文地址:https://www.cnblogs.com/maikucha/p/8337133.html
Copyright © 2020-2023  润新知