package?school;
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計與策劃設(shè)計,雁塔網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:雁塔等地區(qū)。雁塔做網(wǎng)站價格咨詢:18980820575
public?class?Test?{
public?static?void?main(String[]?args)?{
Student?a?=?new?Student1("小明",?"我讀的書是?java",?"我是大一學(xué)生");
Student?b?=?new?Student1("小明",?"我讀的書是??馬列主義",?"我是大二學(xué)生");
Student?c?=?new?Student1("小明",?"我讀的書是??javaee",?"我是大三學(xué)生");
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
/**?學(xué)生類?*/
class?Student?{
private?String?name;
private?String?book;
private?String?type;
public?Student(String?name,?String?book,?String?type)?{
this.name?=?name;
this.book?=?book;
this.type?=?type;
}
public?String?getName()?{
return?name;
}
public?String?getBook()?{
return?book;
}
public?void?setName(String?name)?{
this.name?=?name;
}
public?void?setBook(String?book)?{
this.book?=?book;
}
public?String?getType()?{
return?type;
}
public?void?setType(String?type)?{
this.type?=?type;
}
@Override
public?String?toString()?{
return?"Student?[name="?+?name?+?",?book="?+?book?+?",?type="?+?type?+?"]";
}
}
/**?學(xué)生1?*/
class?Student1?extends?Student?{
public?Student1(String?name,?String?book,?String?type)?{
super(name,?book,?type);
}
}
//?/**?學(xué)生2?*/
//?class?Student2?extends?Student?{
//
//?public?Student2(String?name,?String?book)?{
//?super(name,?book);
//?}
//
//?}
感覺沒有類繼承也能完成呢 不知道是不是這個意思 運行結(jié)果是?
Student [name=小明, book=我讀的書是 java, type=我是大一學(xué)生]
Student [name=小明, book=我讀的書是? 馬列主義, type=我是大二學(xué)生]
Student [name=小明, book=我讀的書是? javaee, type=我是大三學(xué)生]
我將程序分為了兩個文件,一個文件存放Student類、Freshman類(大一學(xué)生)和,Sophomore類(大二學(xué)生),另一個類存放主調(diào)程序類Exos11,具體代碼如下所示,首先是學(xué)生類:
class?Student
{
public?String?name;
Student(String?name)
{
this.name?=?name;
}
public?void?learnMarxism()
{
System.out.println(this.name?+?"?learn?Marxism");
}
}
class?Freshman?extends?Student
{
Freshman(String?name)
{
super(name);
}
public?void?learnJavaSE()
{
System.out.println(this.name?+?"?learn?JavaSE");
}
}
class?Sophomore?extends?Student
{
Sophomore(String?name)
{
super(name);
}
public?void?learnJavaEE()
{
System.out.println(this.name?+?"?learn?JavaEE");
}
}
然后是主調(diào)程序類:
public?class?Exos11
{
public?void?printInfo()
{
Freshman?fr?=?new?Freshman("Jack");
Sophomore?so?=?new?Sophomore("Jane");
fr.learnMarxism();
so.learnMarxism();
fr.learnJavaSE();
so.learnJavaEE();
}
public?static?void?main(String[]?args)
{
Exos11?ex?=?new?Exos11();
ex.printInfo();
}
}
以上就是我的答案,如有問題,歡迎追問。
java接口
什么是接口?
Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。
接口的兩種含義:一,Java接口,Java語言中存在的結(jié)構(gòu),有特定的語法和結(jié)構(gòu);二,一個類所具有的方法的特征集合,是一種邏輯上的抽象。前者叫做“Java接口”,后者叫做“接口”。
在Java語言規(guī)范中,一個方法的特征僅包括方法的名字,參數(shù)的數(shù)目和種類,而不包括方法的返回類型,參數(shù)的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據(jù)這些條件判斷兩個方法是否是重載方法。但在Java編譯器檢查方法的置換時,則會進(jìn)一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
接口繼承和實現(xiàn)繼承的規(guī)則不同,一個類只有一個直接父類,但可以實現(xiàn)多個接口。
Java接口本身沒有任何實現(xiàn),因為Java接口不涉及表象,而只描述public行為,所以Java接口比Java抽象類更抽象化。
Java接口的方法只能是抽象的和公開的,Java接口不能有構(gòu)造器,Java接口可以有public,靜態(tài)的和final屬性。
接口把方法的特征和方法的實現(xiàn)分割開來。這種分割體現(xiàn)在接口常常代表一個角色,它包裝與該角色相關(guān)的操作和屬性,而實現(xiàn)這個接口的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,并不要求其它的共同之處。
為什么使用接口?
兩個類中的兩個類似的功能,調(diào)用他們的類動態(tài)的決定一種實現(xiàn),那他們提供一個抽象父類,子類分別實現(xiàn)父類所定義的方法。
問題的出現(xiàn):Java是一種單繼承的語言,一般情況下,哪個具體類可能已經(jīng)有了一個超類,解決是給它的父類加父類,或者給它父類的父類加父類,只到移動到類等級結(jié)構(gòu)的最頂端。這樣一來,對一個具體類的可插入性的設(shè)計,就變成了對整個等級結(jié)構(gòu)中所有類的修改。
接口是可插入性的保證。
在一個等級結(jié)構(gòu)中的任何一個類都可以實現(xiàn)一個接口,這個接口會影響到此類的所有子類,但不會影響到此類的任何超類。此類將不得不實現(xiàn)這個接口所規(guī)定的方法,而其子類可以從此類自動繼承這些方法,當(dāng)然也可以選擇置換掉所有的這些方法,或者其中的某一些方法,這時候,這些子類具有了可插入性(并且可以用這個接口類型裝載,傳遞實現(xiàn)了他的所有子類)。
我們關(guān)心的不是那一個具體的類,而是這個類是否實現(xiàn)了我們需要的接口。
接口提供了關(guān)聯(lián)以及方法調(diào)用上的可插入性,軟件系統(tǒng)的規(guī)模越大,生命周期越長,接口使得軟件系統(tǒng)的靈活性和可擴(kuò)展性,可插入性方面得到保證。
類型
使用Java接口將軟件單位與內(nèi)部和外部耦合起來。使用Java接口不是具體的類進(jìn)行變量的類型聲明,方法的返還類型聲明,參量的類型聲明,以及數(shù)據(jù)類型的轉(zhuǎn)換。
在理想的情況下,一個具體的Java類應(yīng)當(dāng)只實現(xiàn)Java接口和抽象Java類中聲明的方法,而不應(yīng)當(dāng)給多余方法。
類型等級結(jié)構(gòu)
Java接口(以及抽象類)一般用來作為一個類型的等級結(jié)構(gòu)的起點。
如果一個類已經(jīng)有了一個主要的超類型,那么通過實現(xiàn)一個接口,這個類可以擁有另一個次要的超類型,這種次要的超類型叫做混合類型。
Java接口常用方法
單方法接口
以下是引用片段:
public interface Actionlistener() {
public abstract void actionPerformed(ActionEvent event);
}
僅且只有一個方法,只有實現(xiàn)了這個接口(重寫這個接口中的唯一一個方法),你才有資格去事件監(jiān)聽器列表里注冊(參數(shù)為Actionlistener類型),當(dāng)事件源變動時,自動調(diào)用這個唯一的actionPerformed方法.
標(biāo)識接口
是沒有任何方法和屬性的接口。標(biāo)識接口不對實現(xiàn)它的類有任何語意上的要求,它僅僅表明了實現(xiàn)它的類屬于一個特定的類型(傳遞)。
不推薦過多的使用標(biāo)識接口。
常量接口
用Java接口來聲明一些常量,然后由實現(xiàn)這個接口的類使用這些常量(以前在做畫板的時候這么干過)。建議不要模仿這種常量接口的做法。
Java語言類型安全問題
Java是強(qiáng)類型的語言。這意味著Java編譯器會對代碼進(jìn)行檢查,以確定沒一次賦值,每一次方法的調(diào)用是符合類型的。如果有任何不相符合的情況,Java編譯器就會給出錯誤。
類型檢查是基于這樣一個簡單的事實:每一變量的聲明都給這個變量一個類型;每一個方法包括構(gòu)造器的聲明都給這個方法的特征。這樣一來,Java編譯器可以對任何的表達(dá)式推斷出一個明顯類型,Java編譯器可以基于明顯類型對類型進(jìn)行檢查。
Java語言是類型安全的。這就是說,任何被Java編譯器接受的合法的Java類保證是類型安全的。換言之,在程序運行期間,不會有任何類型的錯誤。一個Java程序根本不可能將一個本來屬于一個類型的變量當(dāng)作另一個類型處理,因此也就不會產(chǎn)生由此而引起的錯誤。
簡單的說,Java語言依靠三種機(jī)制做到了類型安全:編譯期間的類型檢查,自動的存儲管理,數(shù)組的邊界檢查。
Java對于多重繼承是怎么實現(xiàn)的?
首先回答這個問題之前,我需要說明下什么是繼承?什么是多重繼承和單繼承?java采用何種機(jī)制來實現(xiàn)多重繼承:
1.1繼承是面向?qū)ο缶幊痰囊环N特性,是保留原有類功能的前提下拓展或改寫部分功能,實現(xiàn)代碼復(fù)用的方式.。
1.2單繼承就是一個類只可以繼承自一個父類,多繼承是指一個類可以同時繼承多個父類。
1.3java中使用的是單繼承,也就是一個類有且只能有一個父類,java中可以使用接口實現(xiàn)來實現(xiàn)類似多繼承的效果。
2.下面著重介紹Java中如何實現(xiàn)多繼承:
如下是多重繼承示例:
interface CanFight{
void fight();
}
interface CanSwim{
void swim();
}
interface CanFly{
void fly();
}
class ActionCharacter{
public void fight(){
System.out.println("I can fight!");
}
}
class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{
public void swim(){
System.out.println("I can swim!");
}
public void fly(){
System.out.println("I can fly!");
}
}
public class Adventure {
public static void t(CanFight x){x.fight();
}
public static void u(CanSwim x){x.swim();
}
public static void v(CanFly x){x.fly();
}
public static void w(ActionCharacter x){x.fight();
}
public static void main(String[] args){
Hero h=new Hero();
t(h);
u(h);
v(h);
w(h);
}
}
從這個實例中,不能看出Java對于多繼承是如何實現(xiàn)的。
運行結(jié)果:
I can fight!?
I can swim!?
I can fly!?
I can fight!
以上就是Java對于多繼承是如何實現(xiàn)的說明
網(wǎng)頁標(biāo)題:Java怎么繼承三個代碼 java繼承怎么用
網(wǎng)頁地址:http://muchs.cn/article6/dophjig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站設(shè)計公司、網(wǎng)頁設(shè)計公司、軟件開發(fā)、小程序開發(fā)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)