最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ī)范標(biāo)準(zhǔn),大家在實現(xiàn)時,只要符合規(guī)范標(biāo)準(zhǔn),就可以通用。在Java中,接口可以看成是:多個類的公共規(guī)范,是一種引用數(shù)據(jù)類型。

2.2、接口的用法

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

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

    //成員方法
    //public abstract void func();//接口里面的方法是默認(rèn)抽象方法
    default void func(){
        System.out.println("默認(rèn)的方法!");//如果接口當(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)中的成員方法,只能是抽象方法。所有的方法默認(rèn)都是public abstract3、接口當(dāng)中的成員變量,默認(rèn)是public static final

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

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

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

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

interface IShape{
   /* //成員變量   默認(rèn)靜態(tài)常量  必須初始化 (寫不寫都一樣)
    public static final int a = 10;
    //成員方法
    //public abstract void func();//接口里面的方法是默認(rèn)抽象方法
    default void func(){
        System.out.println("默認(rèn)的方法!");//如果接口當(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)系(按分?jǐ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);//分?jǐn)?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 用反射設(shè)置對象的屬性值實例詳解

    Java 用反射設(shè)置對象的屬性值實例詳解

    這篇文章主要介紹了Java 用反射設(shè)置對象的屬性值實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Netty簡單的入門代碼示例

    Netty簡單的入門代碼示例

    這篇文章主要介紹了Netty簡單的入門代碼示例,Netty 的內(nèi)部實現(xiàn)是很復(fù)雜的,但是 Netty 提供了簡單易用的API從網(wǎng)絡(luò)處理代碼中解耦業(yè)務(wù)邏輯,Netty 是完全基于 NIO 實現(xiàn)的,所以整個 Netty 都是異步的,需要的朋友可以參考下
    2023-12-12
  • javaWeb實現(xiàn)簡單文件上傳

    javaWeb實現(xiàn)簡單文件上傳

    這篇文章主要為大家詳細(xì)介紹了JAVAWeb實現(xiàn)簡單文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • IO密集型任務(wù)設(shè)置線程池線程數(shù)實現(xiàn)方式

    IO密集型任務(wù)設(shè)置線程池線程數(shù)實現(xiàn)方式

    這篇文章主要介紹了IO密集型任務(wù)設(shè)置線程池線程數(shù)實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解

    這篇文章主要介紹了微信公眾號 網(wǎng)頁授權(quán)登錄及code been used解決詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • java基礎(chǔ)的詳細(xì)了解第四天

    java基礎(chǔ)的詳細(xì)了解第四天

    這篇文章對Java編程語言的基礎(chǔ)知識作了一個較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來幫助
    2021-08-08
  • Spring?Cloud?Ribbon的使用原理解析

    Spring?Cloud?Ribbon的使用原理解析

    現(xiàn)在Java非常流行微服務(wù),也就是所謂的面向服務(wù)開發(fā),將一個項目拆分成了多個項目,其優(yōu)點有很多,其中一個優(yōu)點就是:將服務(wù)拆分成一個一個微服務(wù)后,我們很容易的來針對性的進行集群部署,這篇文章主要介紹了Spring?Cloud?Ribbon的使用詳解,需要的朋友可以參考下
    2022-07-07
  • Java實現(xiàn)的簡單數(shù)字處理類及用法示例

    Java實現(xiàn)的簡單數(shù)字處理類及用法示例

    這篇文章主要介紹了Java實現(xiàn)的簡單數(shù)字處理類及用法,涉及java數(shù)字運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • IO中flush()函數(shù)的使用代碼示例

    IO中flush()函數(shù)的使用代碼示例

    這篇文章主要介紹了IO中flush()函數(shù)的使用代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java線上CPU內(nèi)存沖高問題排查解決步驟

    Java線上CPU內(nèi)存沖高問題排查解決步驟

    這篇文章主要介紹了Java線上CPU內(nèi)存沖高問題排查解決步驟的相關(guān)資料,Java程序在實際生產(chǎn)過程中經(jīng)常遇到CPU或內(nèi)存使用率高的問題,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07

最新評論

富顺县| 贞丰县| 大兴区| 治多县| 大名县| 珲春市| 抚州市| 工布江达县| 得荣县| 山西省| 南岸区| 远安县| 综艺| 清水县| 正蓝旗| 佳木斯市| 临夏市| 射阳县| 双鸭山市| 泗阳县| 湄潭县| 襄垣县| 临汾市| 嘉祥县| 焉耆| 鹿邑县| 荆门市| 青阳县| 霍林郭勒市| 正宁县| 东丰县| 班戈县| 白水县| 中卫市| 紫阳县| 南木林县| 项城市| 连云港市| 弥渡县| 法库县| 明光市|