JavaSE之面向?qū)ο?/h2>

面向?qū)ο笏拇筇匦?/h4>

抽象:將現(xiàn)實(shí)事物或問(wèn)題抽象成大腦中的概念模型

繼承:一個(gè)類(lèi)可以從一個(gè)現(xiàn)有的類(lèi)當(dāng)中派生出來(lái),派生出來(lái)的類(lèi)稱為該類(lèi)的子類(lèi),原有的類(lèi)稱為父類(lèi)(基類(lèi),超類(lèi))
子類(lèi)會(huì)擁有父類(lèi)當(dāng)中所有的屬性和方法,除了:
①私有成員
②構(gòu)造器
在Java中只支持單繼承,一個(gè)子類(lèi)只能有一個(gè)直接父類(lèi),一個(gè)父類(lèi)可以有任意多個(gè)子類(lèi)
繼承的語(yǔ)法
public class A extends(拓展) B{}
繼承帶來(lái)的優(yōu)點(diǎn)
是一種代碼重用的重要手段,也是實(shí)現(xiàn)"開(kāi)閉原則"的基礎(chǔ),同時(shí)子類(lèi)還可以添加自己獨(dú)有的屬性和方法,來(lái)拓展父類(lèi)功能
開(kāi)閉原則:對(duì)拓展開(kāi)放,對(duì)修改關(guān)閉

public class Employee {
    String name;// 名字
    int id;// 工號(hào)
    public void code() {
        System.out.println(name+"在工作");
    }
}
public class Manager extends Employee{
    double money;
    public void rest() {
        System.out.println(name+"在休息");
    }
}
public class Test {
    public static void main(String[] args) {
        Manager m = new Manager();
        m.name = "李磊";
        m.code();
        m.rest();   
        Employee e = new Employee();
        e.code();
        Employee e1 = new Manager();
    }
}
子類(lèi)實(shí)例化的過(guò)程(創(chuàng)建一個(gè)子類(lèi)對(duì)象時(shí),發(fā)生了什么)
創(chuàng)建子類(lèi)對(duì)象時(shí),子類(lèi)構(gòu)造器會(huì)默認(rèn)調(diào)用父類(lèi)的無(wú)參構(gòu)造器先創(chuàng)建父類(lèi)對(duì)象,之后再創(chuàng)建子類(lèi)對(duì)象
若父類(lèi)沒(méi)有無(wú)參構(gòu)造器,子類(lèi)構(gòu)造器就必須使用super顯式(寫(xiě)代碼)調(diào)用父類(lèi)的有參構(gòu)造器,否則編譯出錯(cuò)
super
①super(args)調(diào)用父類(lèi)其他構(gòu)造器,只能用在子類(lèi)構(gòu)造器,第一行,只能用一次
②super.屬性名,super.方法名

方法的重寫(xiě)

public class FatherDemo1 {
    int num = 100;
    public void study() {
        System.out.println("父類(lèi)在努力學(xué)習(xí)");
    }
}
public class SonDemo1 extends FatherDemo1{
    int num = 20;// 注意屬性不存在重寫(xiě)
    String name = "leo";
    public void test() {
        System.out.println("test方法");
    }
    @Override
    public void study() {
        System.out.println(num);
        System.out.println("子類(lèi)在玩,不咋學(xué)習(xí)");
    }
}
public class Test1 {
    public Object getNum() {
        return "String";
    }
    public static void main(String[] args) {
//      FatherDemo1 sd = new FatherDemo1();
//      SonDemo1 sd1 = new SonDemo1();
//      sd1.name = "張三";
//      sd1.num = 1;
//      sd1.test();
//      sd1.study();
//      sd.study();// 父類(lèi)在努力學(xué)習(xí)  子類(lèi)在玩,不咋學(xué)習(xí)
//      System.out.println(sd.num);
        
//      上溯造型(向上轉(zhuǎn)型) : 父類(lèi)引用指向子類(lèi)對(duì)象
//      父類(lèi)引用不能訪問(wèn)子類(lèi)拓展的屬性和方法
//      調(diào)用的方法取決于對(duì)象類(lèi)型,不取決于引用類(lèi)型
        FatherDemo1 sd = new SonDemo1();
        sd.study();
        System.out.println(sd.num);
        
//      下溯造型(向下轉(zhuǎn)型):子類(lèi)引用指向父類(lèi)對(duì)象,只有上溯過(guò)的才能下溯
        SonDemo1 sd1 = (SonDemo1)sd;
        FatherDemo1 sd2 = sd1;
        FatherDemo1 sd3 = new SonDemo2();
        FatherDemo1 sd4 = sd3;
        
//      判斷一個(gè)引用指向哪一個(gè)類(lèi)
        if(sd4 instanceof SonDemo1) {
            System.out.println("SonDemo1");
        }
        
        if(sd4 instanceof SonDemo2) {
            System.out.println("SonDemo2");
        }
//      Test1 t = new Test1();
//      String str = (String)t.getNum();
//      System.out.println(str.length());
    }
}

封裝:將功能組織到方法中,將屬性和方法組織到類(lèi)中都是封裝


訪問(wèn)權(quán)限修飾符

JavaBean實(shí)體類(lèi)

public class Demo5 {
    public static void main(String[] args) {
        // Java面相對(duì)象特性:繼承,封裝,多態(tài),抽象
        // 抽象(程序員將現(xiàn)實(shí)實(shí)物抽象為腦中概念模型)
        // 封裝 :將一套功能組織成一個(gè)方法,將一套方法加一套屬性組織到一個(gè)類(lèi),將一套類(lèi)組織到一個(gè)包中
        // 訪問(wèn)權(quán)限修飾符
        /*
         * public : 公有,工程中可見(jiàn)
         *      能修飾類(lèi),方法,屬性(全局變量)
         * protected : 受保護(hù)的,當(dāng)前包可見(jiàn),跨包的“親戚(子類(lèi))”可見(jiàn),“非親戚(非子類(lèi))”不可見(jiàn)
         *      能修飾方法和屬性
         * 【friendly,default】:默認(rèn)的,跨包不可見(jiàn)
         *      能修飾類(lèi),方法,屬性(全局變量)
         * private : 私有的,只有當(dāng)前類(lèi)可見(jiàn)
         *      能修飾方法和屬性
         */
        // JavaBean(實(shí)體類(lèi)) : 
        // 1.有無(wú)參構(gòu)造器(必要)
        // 2.屬性全部私有
        // 3.有公有的get(獲取)和set(修改)方法
    }
}
public class Student {
    private int num = 10;
    private int age = 20;
    private String name;
    public void test() {
        System.out.println("測(cè)試方法");
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}

多態(tài):(一種事物的不用形態(tài),對(duì)同一消息做出的不同響應(yīng))是一種編程策略
條件:
①要有泛化(繼承,實(shí)現(xiàn))關(guān)系;
②要有上溯造型(父類(lèi)引用指向子類(lèi)對(duì)象);
③要有方法的重寫(xiě)
優(yōu)點(diǎn):解耦合(拓展性強(qiáng),易維護(hù))

public class Customer {
    int id;
    String name;
    public void buy(TrainStation ts) {}
}
public class Student  extends Customer{
    public Student() {}
    public Student(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public void buy(TrainStation ts) {
        System.out.println(name+"是一個(gè)學(xué)員,打五折,收費(fèi)"+ts.price*0.5);
    }
}
public class Criminal extends Customer{
    public Criminal() {}
    public Criminal(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public void buy(TrainStation ts) {
        System.out.println(name+"是一個(gè)罪犯,打骨折");
    }
}
public class Teacher extends Customer{
    public Teacher() {}
    public Teacher(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public void buy(TrainStation ts) {
        System.out.println(name+"是一個(gè)講師,打八折,收費(fèi)"+ts.price*0.8);
    }
}
public class TrainStation {
    int price = 100;
    public void saleTicket(Customer c) {
        TrainStation ts1 = this;
        c.buy(ts1);
    }
}
public class Test {
    public static void main(String[] args) {
        Customer s = new Student(1001, "小翟");
        Customer t = new Teacher(9527, "大翟");
        Customer c = new Criminal(1011011, "老翟");
        Customer e = new Employee(1, "老翟1111");
        
        TrainStation ts = new TrainStation();
        ts.saleTicket(s);
        ts.saleTicket(t);
        ts.saleTicket(c);
        ts.saleTicket(e);
    }
}

在Java中多態(tài)有哪些體現(xiàn)
重載--編譯時(shí)多態(tài)
重寫(xiě)--運(yùn)行時(shí)多態(tài)

接口

public interface News {
    // 發(fā)布新聞
    void releaseNews();
}
/**
 * 體育板塊
 * @author Administrator
 */
public class Sports implements News{
    @Override
    public void releaseNews() {
        System.out.println("發(fā)布了一條體育新聞");
    }
}
/**
 * 娛樂(lè)板塊
 * @author Administrator
 */
public class Entertainment  implements News{
    public void releaseNews() {
        System.out.println("發(fā)布了一條娛樂(lè)新聞");
    }
}
/**
 * 政治板塊
 * @author Administrator
 */
public class Polity implements News{
    @Override
    public void releaseNews() {
        System.out.println("發(fā)布了一條政治新聞");
    }
}
public class TestDemo1 {
    public static void main(String[] args) {
        while(true) {
            Scanner scan = new Scanner(System.in);
            System.out.println("請(qǐng)輸入要發(fā)布的新聞?lì)愋?);
            System.out.println("1--------體育新聞");
            System.out.println("2--------政治新聞");
            System.out.println("3--------娛樂(lè)新聞");
            System.out.println("4----------退出");
            int num = scan.nextInt();
            // 上溯
            News n = null;
            if(num < 1 || num > 4) {
                System.out.println("無(wú)此選項(xiàng)");
            }else {
                switch(num) {
                    case 1:
                        n = new Sports();
                        break;
                    case 2:
                        n = new Polity();
                        break;
                    case 3:
                        n = new Entertainment();
                        break;
                    case 4:
                        System.out.println("再見(jiàn)");
                        return;
                }
                n.releaseNews();
            }
        }
    }
}

抽象類(lèi)abstract

    public static void main(String[] args) {
        /*
         * final
         * 能修飾類(lèi),方法,屬性(常量)
         * final類(lèi)不能被繼承
         * final方法不能被子類(lèi)重寫(xiě)
         * final屬性常量,不能改變
         * 
         * abstract抽象
         *  能修飾
         *      類(lèi) :不能實(shí)例化(不能創(chuàng)建對(duì)象,但是有構(gòu)造器),它的作用就是做父類(lèi)
         *      方法:抽象方法,沒(méi)有方法體,如果一個(gè)類(lèi)中有抽象方法,這個(gè)類(lèi)必須是抽象類(lèi)
         *  抽象類(lèi)中可以有非抽象方法
         *  如果一個(gè)類(lèi)繼承了一個(gè)抽象類(lèi),就必須實(shí)現(xiàn)父類(lèi)所有抽象方法,除非這個(gè)子類(lèi)也是抽象類(lèi)
         */
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容