三個(gè)錯(cuò):
創(chuàng)新互聯(lián)主營(yíng)成華網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),成華h5成都微信小程序搭建,成華網(wǎng)站營(yíng)銷推廣歡迎成華等地區(qū)企業(yè)咨詢
1.Chicken 類里的howtoeat方法改howtoEat;
2.Apple類和Orange 放到Fruit 類外面。
3。Chicken 類的構(gòu)造方法需要給重量參數(shù),因?yàn)槟阒欢x了一個(gè)構(gòu)造方法。
我調(diào)試的沒(méi)問(wèn)題,改后代碼:
interface Edible{
public String howtoEat();
}
class Animal{
}
class Chicken extends Animal implements Edible,Comparable{
int weight;
public Chicken(int weight){
this.weight=weight;
}
public String howtoEat(){
return "fry it";
}
public int compareTo(Object o){
return weight-((Chicken)o).weight;
}
}
class Tiger extends Animal{
}
abstract class Fruit implements Edible
{}
class Apple extends Fruit {
public String howtoEat(){
return "Make apple cider";
}
class Orange extends Fruit{
public String howtoEat(){
return "Make orange juice";
}
}
}
public class Test{
public static void main(String[] args){
Object[] objects={new Tiger(),new Chicken(10),new Apple()};
for(int i=0;iobjects.length;i++){
showObject(objects[i]);
}
}
public static void showObject(Object object){
if(object instanceof Edible)
System.out.println(((Edible)object).howtoEat());
}
}
public?interface?接口A?{
public?void?get();
}
//**************
public?class?接口A的實(shí)現(xiàn)類?implements?接口A?{
@Override
public?void?get()?{
System.out.println(1);
}
}
//**************
public?class?Test?{
接口A?d?=?new?接口A的實(shí)現(xiàn)類();
public?Test()?{
d.get();
}
}
雖然可以,但不提倡,因?yàn)榻涌谟衅渥约旱拇嬖谝饬x,接口定義行為,一般的都是接口定義,然后用一個(gè)類實(shí)現(xiàn)。
如果您必須要在接口中實(shí)現(xiàn)方法:
public?interface?接口A?{
public?void?get();
public?default?void?set()?{
//實(shí)現(xiàn)
}
}
是指同一計(jì)算機(jī)不同功能層之間的通信規(guī)則稱為接口。
java接口作用:
1、利于代碼的規(guī)范。這樣做的目的一方面是為了給開(kāi)發(fā)人員一個(gè)清晰的指示,告訴他們哪些業(yè)務(wù)需要實(shí)現(xiàn);同時(shí)也能防止由于開(kāi)發(fā)人員隨意命名而導(dǎo)致的命名不清晰和代碼混亂,影響開(kāi)發(fā)效率。
2、有利于對(duì)代碼進(jìn)行維護(hù)??梢砸婚_(kāi)始定義一個(gè)接口,把功能菜單放在接口里,然后定義類時(shí)實(shí)現(xiàn)這個(gè)接口,以后要換的話只不過(guò)是引用另一個(gè)類而已,這樣就達(dá)到維護(hù)、拓展的方便性。
3、保證代碼的安全和嚴(yán)密。一個(gè)好的程序一定符合高內(nèi)聚低耦合的特征,能夠讓系統(tǒng)的功能較好地實(shí)現(xiàn),而不涉及任何具體的實(shí)現(xiàn)細(xì)節(jié)。這樣就比較安全、嚴(yán)密一些,這一思想一般在軟件開(kāi)發(fā)中較為常見(jiàn)。
Display.java ? 接口代碼如下:
public?interface?Display?{
public?void?dis();
}
接口的實(shí)現(xiàn)類DisplayImpl.java ? ?代碼如下:
public?class?DisplayImpl?implements?Display?{
@Override
public?void?dis()?{
//?TODO?Auto-generated?method?stub
System.out.println("輸出方法");
}
public?static?void?main(String[]?args)?{
new?DisplayImpl().dis();
}
}
Java接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
接口作用如下:
1、豐富Java面向?qū)ο蟮乃枷耄涸贘ava語(yǔ)言中, abstract class 和interface 是支持抽象類定義的兩種機(jī)制。正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Α?/p>
2、提供簡(jiǎn)單、規(guī)范性:如果一個(gè)項(xiàng)目比較龐大,那么就需要一個(gè)能理清所有業(yè)務(wù)的架構(gòu)師來(lái)定義一些主要的接口,這些接口不僅告訴開(kāi)發(fā)人員你需要實(shí)現(xiàn)那些業(yè)務(wù),而且也將命名規(guī)范限制住了(防止一些開(kāi)發(fā)人員隨便命名導(dǎo)致別的程序員無(wú)法看明白)。
3、提高維護(hù)、拓展性:比如你要做一個(gè)畫(huà)板程序,其中里面有一個(gè)面板類,主要負(fù)責(zé)繪畫(huà)功能,然后你就這樣定義了這個(gè)類,可是在不久將來(lái),你突然發(fā)現(xiàn)這個(gè)類滿足不了你了,然后你又要重新設(shè)計(jì)這個(gè)類,更糟糕是你可能要放棄這個(gè)類,那么其他地方可能有引用他,這樣修改起來(lái)很麻煩,如果你一開(kāi)始定義一個(gè)接口,把繪制功能放在接口里,然后定義類時(shí)實(shí)現(xiàn)這個(gè)接口,然后你只要用這個(gè)接口去引用實(shí)現(xiàn)它的類就行了,以后要換的話只不過(guò)是引用另一個(gè)類而已,這樣就達(dá)到維護(hù)、拓展的方便性。
4、增強(qiáng)安全、嚴(yán)密性:接口是實(shí)現(xiàn)軟件松耦合的重要手段,它描敘了系統(tǒng)對(duì)外的所有服務(wù),而不涉及任何具體的實(shí)現(xiàn)細(xì)節(jié)。這樣就比較安全、嚴(yán)密一些(一般軟件服務(wù)商考慮的比較多)。
擴(kuò)展資料:
關(guān)于接口的使用規(guī)范:
1、接口中可以定義常量,不能定義變量,如果你在接口中定義屬性,那么通過(guò)反編譯可以看見(jiàn)他會(huì)自動(dòng)用public static final 修飾,接口中的屬性都是全局靜態(tài)常量,接口中的常量必須在定義時(shí)指定初始值。
2、 接口中所有的方法都是抽象方法,接口中方法都會(huì)自動(dòng)用public abstract 修飾,即接口中只有全局抽象方法。
3、 接口不能實(shí)例化,接口中不能有構(gòu)造。
4、 接口之間可以通過(guò)extends實(shí)現(xiàn)繼承關(guān)系,一個(gè)接口可以繼承多個(gè)接口,但接口不能繼承類。
abstract class Person {
public abstract void Eat();
public abstract void Sellp();
}
interface Father {
public void Smoking();
public void GoFishing();
}
interface Mon {
public void WatchTV();
public void Cook();
}
class Me extends Person implements Father,Mon{ //使用“implements”來(lái)實(shí)現(xiàn)接口
public void Eat() {
System.out.println("我喜歡吃魚(yú)香茄子");
}
public void Sellp() {
System.out.println("我喜歡睡覺(jué)時(shí)做夢(mèng)");
}
public void Smoking() {
System.out.println("我不喜歡抽煙");
}
public void GoFishing() {
System.out.println("我喜歡釣魚(yú)");
}
public void WatchTV() {
System.out.println("我喜歡看電視");
}
public void Cook() {
System.out.println("我不太會(huì)做菜");
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Me();
p1.Eat();
p1.Sellp();
Mon m1 = (Mon)p1;
m1.WatchTV();
m1.Cook();
}
}