欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基礎(chǔ)鞏固抽象類與接口詳解

 更新時間:2022年05月05日 16:54:26   作者:往日如風(fēng)_  
在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧

抽象類與接口

1、抽象類

1.1、什么是抽象類

如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類

1.2、抽象類的用法

一個類如果被 abstract 修飾稱為抽象類,抽象類中被 abstract 修飾的方法稱為抽象方法,抽象方法不用給出具體的實現(xiàn)體。

abstract class Shape{
   /* public String name;
    public int age;
    public void func(){
        System.out.println("ada");
    }
    public static void func2(){
        System.out.println("akjdhkjasd");
    }*/
    public abstract void draw();//抽象方法
}

注意:抽象類也是類,內(nèi)部可以包含普通方法和屬性,甚至構(gòu)造方法

1.3、抽象類特點(限制條件)

1、使用abstract 修飾的類,就是抽象類

2、使用abstract 修飾的方法,就是抽象方法

3、抽象類不能夠進行實例化new 抽象類();

4、里面的成員變量和成員方法都是和普通類是一樣的,只不過就是不能進行實例化了

5、當(dāng)一個普通的類,繼承這個抽象類之后,那么這個普通類,必須重寫這個抽象類當(dāng)中所有的抽象方法。

6、抽象類存在的最大的意義就是為了被繼承

7、抽象類也可以發(fā)生向上轉(zhuǎn)型進一步發(fā)生多態(tài)

8、當(dāng)一個抽象類A繼承了抽象類B,此時抽象類A可以不重寫抽象類B當(dāng)中的方法

9、當(dāng)一個普通的類C繼承了第8條的A,此時就得重寫所有的抽象方法

10、 final不能修飾抽象方法和抽象類

11、抽象方法也不能是private的

12、抽象類當(dāng)中不一-定有抽象方法,但是如果這個方法是抽象方法,呢么這個類- -定是抽象類

代碼示例:

abstract class Shape{
   /* public String name;
    public int age;
    public void func(){
        System.out.println("ada");
    }
    public static void func2(){
        System.out.println("akjdhkjasd");
    }*/
    public abstract void draw();//抽象方法
}
abstract class A extends Shape{  //當(dāng)一個抽象類A繼承抽象類Shape時,可以不重寫抽象類Shape中的方法
    public abstract void func();
}
class B extends A{  //出來混遲早得還,父類沒有重寫  你全寫
    @Override
    public void draw() {
    }
    @Override
    public void func() {
    }
}
class Circle extends Shape {  //普通類繼承了抽象類(內(nèi)有抽象方法),這里報錯,  必須重寫Shap類當(dāng)中的抽象個方法
    @Override
    public void draw() {
        System.out.println("?");
    }
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}
class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("??");
    }
}
public class Testdemo {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        //Shape shape = new Shape();    //1、抽象類不能進行實例化
        Circle circle = new Circle();
        Rect rect = new Rect();
        Triangle triangle = new Triangle();
        drawMap(circle);
        drawMap(rect);
        drawMap(triangle);
    }
    //輸出結(jié)果:
    //就是按順序輸出三種圖形
}

2、接口

2.1、什么是接口

接口就是公共的行為規(guī)范標準,大家在實現(xiàn)時,只要符合規(guī)范標準,就可以通用。在Java中,接口可以看成是:多個類的公共規(guī)范,是一種引用數(shù)據(jù)類型。

2.2、接口的用法

接口的定義格式與定義類的格式基本相同,將class關(guān)鍵字換成 interface 關(guān)鍵字,就定義了一個接口。

interface IShape{
   /* //成員變量   默認靜態(tài)常量  必須初始化 (寫不寫都一樣)
    public static final int a = 10;

    //成員方法
    //public abstract void func();//接口里面的方法是默認抽象方法
    default void func(){
        System.out.println("默認的方法!");//如果接口當(dāng)中的方法 需要一個具體的實現(xiàn)  必須用default來修飾
    }
    public static void staticFunc(){
        System.out.println("靜態(tài)方法!");//接口當(dāng)中的靜態(tài)方法可以有具體的實現(xiàn)
    }*/
    void draw();
}

2.3、如何使用接口

接口不能直接使用,必須要有一個"實現(xiàn)類"來"實現(xiàn)"該接口,實現(xiàn)接口中的所有抽象方法。

class Circle implements IShape {   //一個普通的類可以通過implemengts來實現(xiàn)這個接口  另外:重寫抽象方法
    @Override
    public void draw() {
        System.out.println("?");
    }
}

注意:

子類和父類之間是extends繼承關(guān)系,類與接口之間是 implements 實現(xiàn)關(guān)系。

2.4、接口的特點(限制條件)

1、接口使用關(guān)鍵字interface來修飾

2、接口當(dāng)中的成員方法,只能是抽象方法。所有的方法默認都是public abstract3、接口當(dāng)中的成員變量,默認是public static final

4、接口當(dāng)中的方法,如果要實現(xiàn),需要用default來修飾

5、接口當(dāng)中的靜態(tài)的方法,可以有具體的實現(xiàn)

6、接口不能進行實例化。new接口

7、-一個普通的類可以通過implements來實現(xiàn)這個接口

interface IShape{
   /* //成員變量   默認靜態(tài)常量  必須初始化 (寫不寫都一樣)
    public static final int a = 10;
    //成員方法
    //public abstract void func();//接口里面的方法是默認抽象方法
    default void func(){
        System.out.println("默認的方法!");//如果接口當(dāng)中的方法 需要一個具體的實現(xiàn)  必須用default來修飾
    }
    public static void staticFunc(){
        System.out.println("靜態(tài)方法!");//接口當(dāng)中的靜態(tài)方法可以有具體的實現(xiàn)
    }*/
    void draw();
}
class Circle implements IShape {   //一個普通的類可以通過implemengts來實現(xiàn)這個接口  另外:重寫抽象方法
    @Override
    public void draw() {
        System.out.println("?");
    }
}
class Rect implements IShape {
    @Override
    public void draw() {
        System.out.println("?");
    }
}
class Triangle implements IShape {
    @Override
    public void draw() {
        System.out.println("??");
    }
}
  /*  @Override
    public void func() {
        System.out.println("adiashgd");
    }*/
public class Test {
        public static void drawMap(IShape shape){
            shape.draw();
        }
        public static void main(String[] args) {
            //Shape shape = new Shape();    //1、抽象類不能進行實例化
            Circle circle = new Circle();
            Rect rect = new Rect();
            Triangle triangle = new Triangle();
            drawMap(circle);
            drawMap(rect);
            drawMap(triangle);
        }
        //IShape iShape = new IShape();  //接口不能實例化
        /*IShape iShape = new A();
        iShape.draw();
        iShape.func();
        IShape.staticFunc();*/
}

2.5、如何實現(xiàn)多個接口

代碼示例:

class Animal {
    public String name;
    public Animal(String name) {
        this.name = name;
    }
    public void eat(){
        System.out.println("吃飯飯!");
    }
    // 飛  跑  游泳    布恩那個把這些操作寫在這里
}
interface IFlying{
    void fly();
}
interface IRunning{
    void run();
}
interface ISwimming{
    void swim();
}
class Cat extends Animal implements IRunning{
    public Cat(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(this.name+"is cat 正在跑!");
    }
}
//狗  繼承了Animal實現(xiàn)了 跑和游泳接口    先繼承后實現(xiàn)   需要重寫兩接口的方法
class Dog extends Animal implements IRunning,ISwimming{
    public Dog(String name){
        super(name);
    }
    @Override
    public void run() {
        System.out.println(this.name+"is dog 正在跑!");
    }
    @Override
    public void swim() {
        System.out.println(this.name+"正在游泳!");
    }
}
class Robot implements IRunning{
    @Override
    public void run() {
        System.out.println("我是機器人,我在跑!");
    }
}
class Duck extends Animal implements IRunning,ISwimming,IFlying{
    public Duck(String name) {
        super(name);
    }
    @Override
    public void fly() {
        System.out.println(this.name+"鴨子正在飛!");
    }
    @Override
    public void run() {
        System.out.println(this.name+"鴨子正在跑!");
    }
    @Override
    public void swim() {
        System.out.println(this.name+"鴨子正在游泳!");
    }
}
public class TestDemo1 {
    public static void walk(IRunning iRunning){
        iRunning.run();
    }
    public static void fly(IFlying iFlying){
        iFlying.fly();
    }
    public static void swim(ISwimming iSwimming){
        iSwimming.swim();
    }
    public static void main(String[] args) { 
        //swim(new Dog("小狗"));
        Duck duck = new Duck("小鴨子");
        swim(duck);
        walk(duck);
        fly(duck);
    }
    public static void main2(String[] args) {
        walk(new Cat("mimi"));
        walk(new Dog("mimi2"));
        walk(new Robot());
    }
    public static void main1(String[] args) {
        Animal animal = new Cat("mimi");
        Animal animal2 = new Dog("mimi2");
        IRunning iRunning = new Cat("mimi");
        IRunning iRunning2 = new Dog("mimi2");
        ISwimming iSwimming2 = new Dog("mimi2");
    }
}

2.6、接口于接口之間的繼承關(guān)系

類和類之間是單繼承的,一個類可以實現(xiàn)多個接口,接口與接口之間可以多繼承。即:用接口可以達到多繼承的目的。接口可以繼承一個接口, 達到復(fù)用的效果. 使用 extends 關(guān)鍵字.

interface C extends A,B{
    void funcC();
}
class AA implements C{    //類和接口之間是implements  那么接口與接口之間呢----extends[擴展]
    @Override
    public void funcC() {
        System.out.println("funcC");
    }
    @Override
    public void funcA() {
    }
    @Override
    public void funcB() {
    }
}

2.7、如何使用接口

在 sort 方法中會自動調(diào)用 compareTo 方法. compareTo 的參數(shù)是 Object , 其實傳入的就是 Student 類型的對象.然后比較當(dāng)前對象和參數(shù)對象的大小關(guān)系(按分數(shù)來算).

import java.util.Arrays;
class Student implements Comparable<Student>{
    public String name;
    public int age;
    public double score;
    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
    @Override
    public int compareTo(Student o) {
      /*  if (this.age > o.age){
            return 1;
        }else if (this.age == o.age){
            return 0;
        }else {
            return -1;
        }*/
        //return this.name.compareTo(o.name);//姓名比較
        //return this.age-o.age;//年齡比較
        return (int) (this.score-o.score);//分數(shù)比較
    }
}
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("zhangsan",98,78.9);
        Student student2 = new Student("lisi",38,18.9);
        System.out.println(student1.compareTo(student2));
    }
    public static void main1(String[] args) {
        Student[] students = new Student[3];
        students[0] = new Student("zhangsan",98,78.9);
        students[1] = new Student("lisi",38,18.9);
        students[2] = new Student("abc",78,88.9);
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }
}

到此這篇關(guān)于Java基礎(chǔ)鞏固抽象類與接口詳解的文章就介紹到這了,更多相關(guān)Java抽象類與接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)HTTPS連接的示例代碼

    Java實現(xiàn)HTTPS連接的示例代碼

    現(xiàn)在的網(wǎng)絡(luò)世界,安全性是大家都非常關(guān)注的問題,特別是對于咱們這些程序員來說,所以,理解并實現(xiàn)HTTPS連接,對于保護咱們的數(shù)據(jù)安全是極其重要的,下面我們就來學(xué)習(xí)一下在Java中如何實現(xiàn)HTTPS連接吧
    2023-12-12
  • Java判斷線程池線程是否執(zhí)行完畢

    Java判斷線程池線程是否執(zhí)行完畢

    這篇文章主要介紹了Java判斷線程池線程是否執(zhí)行完畢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • SpringSecurity+Redis認證過程小結(jié)

    SpringSecurity+Redis認證過程小結(jié)

    這篇文章主要介紹了SpringSecurity+Redis認證過程小結(jié),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • JAVA中的基本數(shù)據(jù)類型

    JAVA中的基本數(shù)據(jù)類型

    本文主要介紹了JAVA中的基本數(shù)據(jù)類型。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 一篇文章帶你了解SpringBoot Web開發(fā)

    一篇文章帶你了解SpringBoot Web開發(fā)

    這篇文章主要介紹了使用Spring Boot搭建Java web項目及開發(fā)過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Executor攔截器高級教程QueryInterceptor的規(guī)范

    Executor攔截器高級教程QueryInterceptor的規(guī)范

    今天小編就為大家分享一篇關(guān)于Executor攔截器高級教程QueryInterceptor的規(guī)范,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Maven構(gòu)建Hadoop項目的實踐步驟

    Maven構(gòu)建Hadoop項目的實踐步驟

    本文主要介紹了Maven構(gòu)建Hadoop項目的實踐步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • JVM角度調(diào)試優(yōu)化MyEclipse

    JVM角度調(diào)試優(yōu)化MyEclipse

    這篇文章主要介紹了從JVM角度對MyEclipse進行調(diào)試優(yōu)化,為大家分析調(diào)試優(yōu)化MyEclipse的步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MyBatis-plus中的模糊查詢解讀

    MyBatis-plus中的模糊查詢解讀

    這篇文章主要介紹了MyBatis-plus中的模糊查詢解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 簡單了解SpringCloud運行原理

    簡單了解SpringCloud運行原理

    這篇文章主要介紹了簡單了解SpringCloud運行原理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論