国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java基礎(chǔ)--面向?qū)ο?

2019-11-14 11:47:34
字體:
供稿:網(wǎng)友

1.對(duì)象轉(zhuǎn)型(casting)

 一個(gè)基類的引用類型變量可以"指向"其子類的對(duì)象。

一個(gè)基類的引用不可以訪問其子類對(duì)象新增加的成員(屬性和方法)

可以使用引用變量    instanceof類名   來判斷該引用類型變量所"指向"的對(duì)象是否屬于該類或該類的子類

子類的對(duì)象可以當(dāng)作基類的對(duì)象來使用稱作向上轉(zhuǎn)型(upcasting),反之成為向下轉(zhuǎn)型(downcasting)

public class Animal {    public String name;    Animal(String name) {        this.name = name;    }}public class Dog extends Animal{    public String furColor;    Dog(String n,String furColor) {        super(n);        this.furColor = furColor;    }}public class Cat extends Animal{    public String eyeColor;    Cat(String name,String eyeColor) {        super(name);        this.eyeColor = eyeColor;    }}public class TestCasting {    public static void main (String agrs[]){        Animal a  =new Animal("coco");        Dog d = new Dog("bigblack","black");        Cat c = new Cat("smallblue","blue");        System.out.PRintln(a instanceof Animal);        System.out.println(d instanceof Animal);        System.out.println(c instanceof Animal);        System.out.println(a instanceof Cat);        a = new Dog("bigyellow","yellow");        System.out.println(a.name);        System.out.println(a instanceof Animal);        System.out.println(a instanceof Dog);        Dog d1 = (Dog)a;        System.out.println(d1.furColor);    }}結(jié)果是:

true

true

true

false

bigyellow

true

true

yellow

針對(duì)a = new Dog("bigyellow","yellow");的解釋:

大框?yàn)锳nimal對(duì)象a

針對(duì)Dog d1 = (Dog)a;的解釋:

public class TestCasting {    public static void main (String agrs[]){        TestCasting test = new TestCasting();        Animal a  =new Animal("coco");        Dog d = new Dog("bigblack","black");        Cat c = new Cat("smallblue","blue");        test.f(a);test.f(d);test.f(c);                                 //一個(gè)基類的引用類型變量可以"指向"其子類的對(duì)象    }    public void f(Animal a){        System.out.println("name:" +a.name);        if(a instanceof Dog){            Dog dog =(Dog)a;            System.out.println("furColor:"+dog.furColor);        } else if(a instanceof Cat){            Cat cat =(Cat)a;            System.out.println("eyeColor:"+cat.eyeColor);        }    }}結(jié)果是:

name:coconame:bigblackfurColor:blackname:smallblueeyeColor:blue

2.動(dòng)態(tài)綁定和多態(tài)

動(dòng)態(tài)綁定是指“在執(zhí)行期間”(而不是編譯期間)判斷所用對(duì)象的實(shí)際類型,根據(jù)其實(shí)際的類型調(diào)用其相應(yīng)的方法。也就是說父類中的方法,在子類中進(jìn)行了重寫,在編譯中調(diào)用了父類的方法,但是在實(shí)際的執(zhí)行過程中要看,你實(shí)際new出來的對(duì)象是那個(gè)子類或者是父類,來執(zhí)行相關(guān)類中的方法。

多態(tài)的條件:

摩托車和卡車?yán)^承自car,繼承重寫后,測試類時(shí) car mt = new 摩托車();

1.要有繼承   

2.要有重寫      

3.父類引用指向子類對(duì)象

public class Animal {    private String name;    Animal(String name) {        this.name = name;    }    public void enjoy() {        System.out.println("叫聲......");    }}public class Dog extends Animal {    private String furColor;    Dog(String n, String c) {        super(n);        furColor = c;    }    public void enjoy() {        System.out.println("狗叫聲......");    }}public class Cat extends Animal {    private String eyesColor;    Cat(String n, String c) {        super(n);        eyesColor = c;    }    public void enjoy() {        System.out.println("貓叫聲......");    }}public class Bird extends Animal{    Bird(){        super("bird");    }    public void enjoy() {        System.out.println("鳥叫聲......");    }}public class Lady {    private String name;    private Animal pet;    Lady(String name, Animal pet) {        this.name = name;        this.pet = pet;    }    public void myPetEnjoy() {        pet.enjoy();    }}public class Test {    public static void main(String args[]) {        Cat c = new Cat("catname", "blue");        Dog d = new Dog("dogname", "black");        Bird b = new Bird();        Lady l1 = new Lady("l1", c);                                        //new出來的Cat對(duì)象,執(zhí)行時(shí)指向Cat的enjoy方法        Lady l2 = new Lady("l2", d);        Lady l3 = new Lady("l3", b);        l1.myPetEnjoy();        l2.myPetEnjoy();        l3.myPetEnjoy();    }}結(jié)果是:

貓叫聲......狗叫聲......鳥叫聲......

內(nèi)存分析如下:

3.抽象類

用abstract關(guān)鍵字來修飾一個(gè)類時(shí),這個(gè)類叫做抽象類;用abstract來修飾一個(gè)方法時(shí),該方法叫做抽象方法。

含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。

抽象類不能被實(shí)例化。

抽象方法只需聲明,而不需要實(shí)現(xiàn)。

有方法只需要定義不需要實(shí)現(xiàn)時(shí),使用抽象,即是這個(gè)方法需要重寫時(shí)

對(duì)上述的程序作如下的修改來說明抽象類:

public abstract class Animal {    private String name;    Animal(String name) {        this.name = name;    }    public abstract void enjoy();}public class Dog extends Animal {    private String furColor;    Dog(String n, String c) {        super(n);        furColor = c;    }    public void enjoy() {        System.out.println("狗叫聲......");    }}public abstract class Cat extends Animal {    private String eyesColor;    Cat(String n, String c) {        super(n);        eyesColor = c;    }    public abstract void enjoy();}public class Bird extends Animal{    Bird(){        super("bird");    }    public void enjoy() {        System.out.println("鳥叫聲......");    }}public class Lady {    private String name;    private Animal pet;    Lady(String name, Animal pet) {        this.name = name;        this.pet = pet;    }    public void myPetEnjoy() {        pet.enjoy();    }}public class Test {    public static void main(String args[]) {        //Cat c = newCat("catname","blue");                     //由于Cat被定義為抽象類,所以不能被實(shí)例化        Dog d = new Dog("dogname", "black");        Bird b = new Bird();        //Lady l1 = new Lady("l1",c);        Lady l2 = new Lady("l2", d);        Lady l3 = new Lady("l3", b);        //l1.myPetEnjoy();        l2.myPetEnjoy();        l3.myPetEnjoy();    }}結(jié)果是:

狗叫聲......鳥叫聲......4.final關(guān)鍵字

final的變量的值不能夠被改變(final的成員變量,final的局部變量(形參))

final的方法不能夠被重寫,final的類不能被繼承

public void m(final int j){ j =9;}   不允許這樣,這樣定義說明在m方法內(nèi)部不允許改變 j的值

5.接口

接口(interface)是抽象方法和常量值的定義集合

從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)

接口中聲明的屬性默認(rèn)是public static final的,也只能是public static final的

接口中只能定義抽象方法,而且這些方法默認(rèn)是public的,也只能是public的

接口可以繼承其他的接口,并添加新的屬性和抽象方法

多個(gè)無關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口

與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性

定義java類的語法格式:

權(quán)限修飾符  class 名字 [extends 父類][implements  接口列表]{

public interface Singer {    public void sing();    public void sleep();}public interface Painter {    public void paint();    public void eat();    public void setName(String i);}public class Student implements Singer {    private String name;    Student(String name) {        this.name = name;    }    public void study() {        System.out.println("studying");    }    public void sing() {        System.out.println(this.name + " want to sing!");    }    public void sleep() {        System.out.println(this.name + " want tosleep more!");    }}public class Teacher implements Singer,Painter{    private String name;    public String getString() {        return name;    }    Teacher(String name) {        this.name = name;    }    public void setName(String name) {        this.name = name;    }    public void teacher() {        System.out.println("teachering");    }    public void sing() {        System.out.println(this.name + "want to sing!");    }    public void sleep() {        System.out.println(this.name + "want tosleep more!");    }    public void paint() {        System.out.println(this.name + "like painting!");    }    public void eat() {        System.out.println(this.name + "like eating!");    }}public class TestInterface {    public static void main(String agrs[]) {        Singer s1 = new Student("coco");        s1.sing();        s1.sleep();        Singer s2 = new Teacher("mimi");        s2.sing();        s2.sleep();        Painter p1 = (Painter) s2;        p1.setName("nini");        p1.paint();        p1.eat();    }}

結(jié)果是:

coco want to sing!

coco want tosleep more!mimi want to sing!mimi want tosleep more!nini like painting!nini like eating!

另外的,在main方法里添加一個(gè)

f(Singer s){

    s.sing();

                                 //只要實(shí)現(xiàn)了這個(gè)接口的任何一個(gè)類的對(duì)象都可以往該方法里傳

6.總結(jié)


上一篇:鏈表

下一篇:歡迎使用CSDN-markdown編輯器

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 塔城市| 武安市| 凌源市| 青浦区| 增城市| 运城市| 德安县| 呼伦贝尔市| 凯里市| 三门峡市| 上虞市| 南宁市| 苍南县| 通海县| 隆昌县| 察隅县| 阿拉善盟| 南部县| 林州市| 新丰县| 高淳县| 故城县| 九龙县| 公主岭市| 沙湾县| 石泉县| 仪征市| 福建省| 萍乡市| 碌曲县| 甘泉县| 东阳市| 仁怀市| 子长县| 宁化县| 喀喇| 霍城县| 兰溪市| 阳城县| 三都| 盱眙县|