Java中抽象類與方法的重寫方式
1. 抽象類
- 關(guān)鍵字:abstract
類:用來描述一類具體的事物
抽象類:抽象的、模糊的、不具體的類
- 在Java的普通類中是不允許多繼承的,原因是會出現(xiàn)調(diào)用
- 不明確的問題;
總結(jié):父類中的功能是不能刪除的,但其形式是不需要的(沒有存在的意義),此時就可以將父類中功能的 具體實現(xiàn) 形式 給刪掉;
類的具體實現(xiàn):創(chuàng)建對象
抽象方法存在的意義是什么?
- 用于定義功能,明確該類具備此功能-----規(guī)則
特點:
- 1.抽象類可以有抽象方法,也可以有非抽象的方法
- 2.抽象類中可以有構(gòu)造器,但是不能創(chuàng)建對象,空間需要由子類對象來開辟
2. 方法的重寫
方法重載:在同一個類中,方法名相同,參數(shù)列表不同(參數(shù)位置、參數(shù)個數(shù)、參數(shù)類型),與返回值無關(guān)
方法重寫:在繼承或?qū)崿F(xiàn)的關(guān)系下,方法名相同,參數(shù)列表相同,返回值類型相同,子類的修飾權(quán)限要大于或等于父類中的修飾符權(quán)限
1. 什么情況下需要重寫父類中的類型呢?
1.1 子類有自己的特殊實現(xiàn)形式時,此時就可以重寫父類中的功能
- 如果沒有特殊實現(xiàn)就不需要重寫(此時重寫不是必須的)
2.1 所有的子類都有自己的特殊實現(xiàn)形式時,父類中的功能也就沒
- 必要有具體的實現(xiàn),就會變成抽象,那此時,其所有的子類都
- 必須重寫父類中全部的抽象方法
2. @Override 稱為注解
此處的含義是重寫,如果方法上加上了該注解,就代表該方法是從父類中重寫過來的(如果此時刪除了父類中的該方法,子類就會報錯)
// 調(diào)用 public class Demo { ?? ?public static void main(String[] args) { ?? ??? ? ?? ?} }
package day0202; // 爺爺類(抽象類) public abstract class Old { ?? ?private String type; ?? ?private String name; ?? ?private String color; ?? ?private int age; ?? ? ?? ?public abstract void eat(); ?? ?public abstract void sleep(); ?? ?public abstract void weight(); ?? ? ?? ? ?? ?public void ear() { ?? ??? ?System.out.println("圓圓的"); ?? ?} ?? ?public void tail() { ?? ??? ?System.out.println("尾部是卷的"); ?? ?} ?? ? ?? ? ?? ?public String getType() { ?? ??? ?return type; ?? ?} ?? ?public void setType(String type) { ?? ??? ?this.type = type; ?? ?} ?? ?public String getName() { ?? ??? ?return name; ?? ?} ?? ?public void setName(String name) { ?? ??? ?this.name = name; ?? ?} ?? ?public String getColor() { ?? ??? ?return color; ?? ?} ?? ?public void setColor(String color) { ?? ??? ?this.color = color; ?? ?} ?? ?public int getAge() { ?? ??? ?return age; ?? ?} ?? ?public void setAge(int age) { ?? ??? ?this.age = age; ?? ?} ?? ? }
package ****; // 父類繼承爺爺類 ?? ?public class Parent1 extends Old { ?? ??? ? ?? ??? ?private String eyes; ?? ??? ? ?? ??? ? ?? ??? ?@Override ?? ??? ?public void eat() { ?? ??? ??? ?super.ear(); ?? ??? ??? ?super.tail(); ?? ??? ??? ?System.out.println("吃肉,通過哺乳其他動物"); ?? ??? ?} ?? ??? ? ?? ??? ?@Override ?? ??? ?public void sleep() { ?? ??? ??? ?System.out.println("困了就睡覺"); ?? ??? ?} ?? ??? ? ?? ??? ?@Override ?? ??? ?public void weight() { ?? ??? ??? ?System.out.println("比較大"); ?? ??? ?} ?? ?}
當(dāng)在繼承關(guān)系中,子父類中有相同的方法或變量時,程序的編譯執(zhí)行有什么區(qū)別
- 非靜態(tài)的方法:執(zhí)行的時候走的是子類中覆蓋后的方法
- 非靜態(tài)的變量:執(zhí)行的時候走的是子類中的變量
靜態(tài)的方法:執(zhí)行的是調(diào)用者中的方法
靜態(tài)的屬性:執(zhí)行的是調(diào)用者中的方法
抽象方法不能與哪些關(guān)鍵字共存?
private
:private修飾的方法只能在本類中使用,而抽象方法要求必須讓子類實現(xiàn),兩者相互矛盾final
:final修飾的方法不能被重寫,而抽象方法必須要被重寫,static
:static修飾的方法可以通過類名直接調(diào)用,而抽象方法是沒有方法體的
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java的JDBC中Statement與CallableStatement對象實例
這篇文章主要介紹了Java的JDBC中Statement與CallableStatement對象實例,JDBC是Java編程中用于操作數(shù)據(jù)庫的API,需要的朋友可以參考下2015-12-12Java純代碼實現(xiàn)導(dǎo)出pdf合并單元格
這篇文章主要為大家詳細(xì)介紹了Java如何純代碼實現(xiàn)導(dǎo)出pdf與合并單元格功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12基于resty orm的ActiveRecord操作數(shù)據(jù)指南
這篇文章主要為大家介紹了基于resty orm的ActiveRecord操作數(shù)據(jù)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03