java繼承和介面
JAVA繼承和介面
題目:
學生類具有姓名屬性、學習等方法,大學生也是學生的一種,除了姓名之外還有年齡比較大這個屬性,當然大學生也有學習等方法,只不過大學生的學習方式不再跟小學中學一樣了,所以大學生的學習方法跟學生類是不一樣的,繼承學生類之後需要對學習這個方法進行改寫。
首先,我們需要寫出一個學生類,具有姓名這個屬性,學習這個方法,為了接下來實驗結果的直觀,我們將學習這個方法標識(方法簽名):學生姓名+“正在學習”:
public class Student /*extends Object*/{ public String name; public void setName(String n){ name = n; } public String getName(){ return name; } public void study(){ System.out.println(name+"正在學習");//方法簽名 } }
然後寫一個大學生類繼承學生類同時新寫入一個printName類,呼叫父類Student的getName方法,同時重寫父類study方法並標識(方法簽名):
public class UNStudent extends Student{ private int age; public UNStudent(){ //super(a); System.out.println("UNStudent"); } public void printName(){ System.out.println("名字:"+getName()+" 年齡:"+age); } public void study(){ System.out.println("大學生"+name+"正在學習"); } }
主函式部分就是建立子類UNStudent物件然後呼叫兩個方法:
public class Manage {
public static void main(String[] args) {
UNStudent un = new UNStudent();
un.setName("hyn");
un.study();
un.printName();
}
}
執行結果如下:
以上是比叫簡單的繼承測試,接下來我會對繼承的一些細節和實際實驗過程中我們可能會遇到一些問題做出解釋:
1、 extends Object 所有類都預設帶有一個,可不寫。Object類是類層次結構的根,java中所有的類都繼承自這個類。例如,當我們在申明Student類時加上去這個語句,並沒有報錯:
public classStudent extends Object
2、 繼承
1)關鍵字:extends
2)格式:public class 子類(派生類) extends 父類(基類,超類){}
3)子類會繼承父類中所有的屬性和方法,但私有屬性和方法不能直接呼叫(可用get()方法間接呼叫)
4)一個類只能繼承一個類,不能繼承多個,但是能多層次繼承
3、 方法重寫(覆蓋)
1)發生在有繼承關係的兩個類之間
2)返回值型別,方法名,引數型別(個數,順序)跟原方法完全一樣
4、 繼承中的構造方法
1)子類一定要呼叫一次父類的構造方法,父類中無參構造方法預設被呼叫
2)如果父類中構造方法已被人為改寫(例如新增引數)就必須在子類構造方法裡帶同樣的引數,同時在建立物件時也應該加 入相應引數,例如我在Student類加入建構函式:
public Student(inta){
System.out.println("Student");
}
UNStudent的建構函式就會報錯:
這時我們只需要改成這樣就不會報錯了:
public UNStudent(inta){
super(a);
System.out.println("UNStudent");
}
同時主函式在建立物件的時候,因為UNStudent的建構函式帶有引數,所以建立物件必須帶有引數:
UNStudent un = newUNStudent(10);
這樣最後結果就是一樣的了。
3)關於super():
當我們的父類沒有寫構造方法時,系統會預設替我們自動生成一個沒有帶任何引數的構造方法,當該父類被繼承之後,系統也會在子類的建構函式(可能是系統預設自動生成也可能是人為寫的)的第一行加一個super(),也就是說系統在構造子類物件的同時會先構造父類物件,但是當我們的父類物件是自己寫的且帶有引數的時候,系統沒有辦法幫我們生成一個super(),我們必須手動輸入super(引數1,引數2……),這些引數可以是具體的數字或字母也可以是一個由子類建構函式引數或者屬性所代表的字母或字串。
此時的執行結果可以直觀看出程式執行過程:
5、 繼承中的轉型
1) 自動轉型格式:
UNStudent un1 = new UNStudent();
Student un=un1;
2) 強制轉型
將一個父類型別的物件自動轉型為子類(該父類型別必須 是子型別自動轉換而來的)
格式:
UNStudent un1 = new UNStudent();
Student un=un1;
un.setName("hyn");
un.study();
UNStudent unst = (UNStudent)un;
unst.study();
unst.printName();
3) 轉型的結果
6、 子類在繼承父類的時候,不能減小方法的可訪問範圍
範圍從大到小:
public > 預設(無) > protected> private
7、介面
在父類和子類的關係中可以看出,父類是子類的抽象類,換句話說,子類在父類的基礎上新增或者修改一些屬性或者方法。而當父類非常抽象的時候,或者說當我們僅僅知道這個類的物件應該幹什麼,而具體怎麼去做我們都還不清楚的時候,我們可以定義這樣一個特殊類,它只有方法的定義,沒有方法體,如果一個類中的所有方法都沒有方法體,這個類我們叫做介面。
1) 介面的格式
public interface Student {//定義介面用interface而不是class
//常量
//介面中的屬性預設是 public static final,且只能是該格式
public static final String NAME = "名字啊";
//抽象方法
//介面中的抽象方法預設是public abstract,且只能是該格式
public abstract void study();
}
2) 介面中的方法都是抽象方法所以沒有建構函式,不能建立物件。我們定義介面是給子類來擴充套件的,當然介面同樣是一種 資料型別。
3) 介面的實現
//繼承介面:關鍵字implements
//public class 子類 extends 父類 implements 介面類,介面類,,{}
//繼承介面一定要重寫介面中所有的抽象方法
public class IntStudent implements Student{
//重寫方法一定要去掉abstract
public void study(){
System.out.println("子類重寫介面中的方法!");
}
}
4) 因為介面中方法預設public,所以即使接口裡沒有寫public,實現的時候一定要加上pbulic
5)介面的使用以及結果演示
相關推薦
java繼承和介面
JAVA繼承和介面 題目: 學生類具有姓名屬性、學習等方法,大學生也是學生的一種,除了姓名之外還有年齡比較大這個屬性,當然大學生也有學習等方法,只不過大學生的學習方式不再跟小學中學一樣了,所以大學生的學習方法跟學生類是不一樣的,繼承學生類之後需要對學習這個方法進行改寫。
在UML中表示Java繼承和介面
繼承在Java中,我們可以宣告一個類擴充套件(extends)另一個類,還可以宣告一個類實現(implements)一個或者多個介面。下面我們來看看如何在UML中表達這些概念。下面是三個Java類的基本骨架。第一個類是代表某種支付方式的Payment抽象類,另外兩個類分別擴
java繼承和介面的區別
當使用繼承的時候,主要是為了不必重新開發,並且在不必瞭解實現細節的情況下擁有了父類我所需要的特徵。 但是很多時候,一個子類並不需要父類的所有特徵,它可能只是需要其中的某些特徵,但是由於通過繼承,父類所有的特徵都有了,需要的和不需要的特徵同時具備了。而那些子類實際上不
Java物件和例項的關係、Java資料封裝、Java繼承和多型、Java抽象類和介面、Java靜態欄位和方法、Java包和作用域、Java的classpath和jar、Java核心類
Java物件和例項的關係: 面向物件程式設計(Object-Oriented Programming),是對現實世界建立計算機模型的一種方法。 class是物件的模板,它定義瞭如何建立例項,class的名字就是資料型別。一個class裡可以有多個欄位(field),欄位用
java基礎知識總結--繼承和介面
什麼是繼承?什麼是介面?他們之間的區別和聯絡是什麼? 什麼是繼承? 繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能。多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。多個類稱為
java繼承和多型、介面小結
詳細程式碼自己找自己敲,以下會不定時更新。 一個檔案中只能有一個公共類 java的繼承只能是單繼承。 一個類之所以能夠呼叫父類成員,是由於java編譯器會自動為子類新增一個引用名為super的父類成員物件。建立子類物件的過程就是從底層的基類往上,一層層地來
JAVA實驗三 抽象類的繼承和介面的實現 (多型)
題目要求: 1.編寫一個ComputerAverage抽象類,類中有一個抽象方法求平均分average,可以有引數。定義Gymnastics類和School類,它們都是ComputerAverage的子類,Gymnastics類中計算選手的平均成績的方法是去掉一個最低分
Java繼承和構造函數
args 初始 per num ble cells con ons lai 構造函數不是類的成員,它們不是由子類繼承的。它們用於初始化實例變量。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class CSuper {
Java繼承和多型的底層原理
當子類繼承父類以後,子類的物件為什麼可以訪問到父類中定義的方法?當子類Override了父類中的方法以後,訪問的是子類Override以後的方法,這是怎麼實現的?當子類Override了父類的方法以後,還有辦法得到父類的方法嗎?部落格:重寫(overwrite)、過載(overload)
java:繼承和多型
一.繼承 1.繼承 ①繼承是面向物件程式設計的三大特徵之一,是一種基於已有類來建立新類的機制。由繼承而得到的類稱為子類(或派生類),被繼承的類稱為父類(或超類)。 ② Java中每個類只允許有一個父類。語法如下:class <子類> extends <父類>
繼承和介面的設計
學習了一門的語言的時候,一開始總是這側重功能的實現。很少去關注優化設計,底層設計和架構設計,我想,這是也“碼農”的缺陷吧。一開始的時候,肯定有學習過繼承和介面的區別吧,但是實際使用者卻很少去關注這兩者的區別。程式設計久了,越來越覺得這兩者的使用真的很講究。 首先說
Java繼承和多型實現例子
繼承,多型的簡單例子 我們想做一個類用於存放CD,DVD等光碟,要應用多型和繼承,去除重複性程式碼,便於以後維護(新增新的格式光碟,如:MP3,MP4),因此我們首先建立一個工程demo,建立datab
java繼承和組合
要實現的目標:鳥(Bird)和狼(Wolf)都是動物(Animal),動物都有心跳(beat()),會呼吸(beat()),但是鳥會fly(fly()),狼會奔跑(run()),用java程式實現以上描述。 InheritTest.java 使用繼承方式實現目標Compos
java繼承與介面
在java中繼承是使用extends關鍵字來實現,不同於C++中的多繼承設計,java中的繼承只能是單繼承,父類可以使一般的類也可以是抽象類,抽象類就是被abstract關鍵字修飾過的類,在其中可以定
Java繼承和多型===Java繼承的概念與實現
繼承是類與類之間的關係,是一個很簡單很直觀的概念,與現實世界中的繼承(例如兒子繼承父親財產)類似。繼承可以理解為一個類從另一個類獲取方法和屬性的過程。如果類B繼承於類A,那麼B就擁有A的方法和屬性。繼承使用 extends 關鍵字。例如我們已經定義了一個類 People:
PHP類的繼承和介面
PHP類的繼承的一些語法 -PHP的類只支援單繼承,就是每個類最多隻能有一個父類或者沒有父類。 -子類不能繼承父類使用private修飾的成員。 修飾符 可訪問範圍 public 當前類、子類和類外 protecte
關於Android studio無法建立Java Class和介面問題解決辦法。
小白,入職了一家新公司,重新配置了studio 的工作環境,拉完程式碼,剛開始一切正常,在專案上改改bug啥的都沒問題,後來加需求要新增java類和介面,這就出現問題了,新建的時候,就會報錯:Unable to parse template "Interface" Er
jvm視角看java繼承和多型
package test.xing; class Father{ protected int age; public Father(){ age = 40; } void eat(){ System.out.println("父親
JAVA基礎整理-50.Java繼承和多態
bstr racket 工作 圖1 面向對象 改變 重載 必要條件 應該 Java類的封裝 封裝就是將對象的屬性和方法相結合,通過方法將對象的屬性和實現細節保護起來,實現對象的屬性隱藏。 Java類的繼承:Java簡單的繼承及單繼承和多繼承的區別 簡單繼承
【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.2 類的繼承
【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.2 類的繼承 super的使用 1.使用super訪問父類的域和方法 注意:正是由於繼承,使用this可以訪問父類的域和方法。但是有時為了明確指明父類的域和方法,就要用關鍵字super。this和super都是指當前同一個物件