最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的動(dòng)態(tài)綁定機(jī)制

 更新時(shí)間:2023年06月06日 09:23:50   作者:昱晟168  
這篇文章主要介紹了Java中的動(dòng)態(tài)綁定機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JAVA動(dòng)態(tài)綁定機(jī)制(非常非常重要)

JAVA動(dòng)態(tài)綁定機(jī)制:動(dòng)態(tài)綁定是與運(yùn)行類型進(jìn)行綁定

1.當(dāng)調(diào)用對(duì)象方法的時(shí)候,該方法會(huì)和該對(duì)象的內(nèi)存地址/運(yùn)行類型(也就是與運(yùn)行類型)綁定(意思就是如:有一個(gè)Cat類,Cat類中有一個(gè)cay方法,這個(gè)方法會(huì)和Cat類發(fā)生動(dòng)態(tài)綁定)

2.當(dāng)調(diào)用對(duì)象屬性時(shí),沒(méi)有動(dòng)態(tài)綁定機(jī)制,哪里聲明,哪里使用

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.binding;
public class DynamicBinding {
    public static void main(String[] args) {
        A a  = new B();//向上轉(zhuǎn)型
        //當(dāng)注釋了B類中的sum()方法和sum1()方法結(jié)果變?yōu)榱?0和20
        System.out.println(a.sum());//40 --》30
        System.out.println(a.sum1());//30 --》20
    }
}
class A{//父類
    public int i = 10;
    //由于調(diào)用方法時(shí),方法會(huì)和該對(duì)象的內(nèi)存地址(也就是運(yùn)行類型)綁定
    //由于運(yùn)行類型是B,所以查找是從B類方法開(kāi)始查找,要因?yàn)锽類中的getI()方法,直接返回屬性i,屬性沒(méi)有動(dòng)態(tài)綁定機(jī)制,因此直接返回20
    public int sum(){
        return getI()+10;
    }
    //方法是有動(dòng)態(tài)綁定機(jī)制,所以查找時(shí),先從子類B查找,由于B類沒(méi)有sum1方法,
    //繼承查找父類,父類有則調(diào)用sum1方法,要因?yàn)閟um1方法返回是屬性i,屬性沒(méi)有動(dòng)態(tài)綁定機(jī)制直接返回i的值,所以是20
    public int sum1(){
        return i+10;
    }
    public int getI(){
        return i;
    }
}
class B extends A {
    public int i = 20;
//    public int sum(){
//        return i+20;
//    }
//
//    public int sum1(){
//        return i+10;
//    }
    public int getI(){
        return i;
    }
}

多態(tài)應(yīng)用

基本介紹:

多態(tài)數(shù)組是數(shù)組定義類型為父類類型,里面保存的實(shí)際元素類型為子類類型

案例:

1.現(xiàn)有一個(gè)繼承結(jié)構(gòu)如下:要求創(chuàng)建一個(gè)Person對(duì)象,2個(gè)Student對(duì)象和2個(gè)Teacher對(duì)象,統(tǒng)一放在數(shù)組中。并調(diào)用msay方法。

2.應(yīng)用實(shí)例升級(jí),如何調(diào)用子類特有的方法,比如Teacher有一個(gè)teach,Student有一個(gè)study怎么調(diào)用?

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployArray;
public class Person {
    private String name;
    private int age;
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String say(){
        return "姓名:"+name+"\t年齡:"+age;
    }
}
package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployArray;
public class Student extends  Person{
    private double score;
    public Student(String name,int age) {
        this.setName(name);
        this.setAge(age);
    }
    public Student(String name,int age,double score){
        //注意在構(gòu)造器中使用super和this調(diào)用構(gòu)造器完成初始化,兩者只能出一個(gè)并且放在第一條語(yǔ)句
        super(name,age);
//        this(name,age);
        this.score =score;
    }
    public String say(){
        return super.say()+"\t成績(jī):"+score;
    }
    public void study(){
        System.out.println("學(xué)生:"+getName()+"正在學(xué)習(xí)JAVA課程!");
    }
}
package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployArray;
public class Teacher extends  Person{
    private double salary;
    public Teacher(String name,int  age) {
        this.setName(name);
        this.setAge(age);
    }
    public Teacher(String name,int age,double salary){
        super(name,age);
        this.salary = salary;
    }
    public String say(){
        return super.say()+"\tsalary:"+salary;
    }
    public void teach(){
        System.out.println("老師:"+getName()+"正在教JAVA課程!");
    }
}
package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployArray;
public class PloyArray {
    public static void main(String[] args) {
        Person[] people = new Person[5];
        people[0] = new Person("???,20);
        people[1] = new Student("湛江",18,99);
        people[2] = new Student("南寧",20,99.9);
        people[3] = new Teacher("西安",21,21688);
        people[4] = new Teacher("廣州",22,22168);
        //循環(huán)遍歷多態(tài)數(shù)組,調(diào)用say
        for (int i = 0; i < people.length; i++) {
            //person[i]編譯類型是Person,運(yùn)行類型是根據(jù)實(shí)際情況有JV來(lái)判斷
//            System.out.println(people[i].say());//動(dòng)態(tài)綁定機(jī)制
            if (people[i] instanceof Student){
                Student student = (Student) people[i];
                student.study();
            }else if (people[i] instanceof  Teacher){
                Teacher teacher = (Teacher) people[i];
                teacher.teach();
            }else {
                System.out.println(people[i].say());//在類型轉(zhuǎn)換時(shí),范圍大的一定要放在后面,要不大的對(duì)小范圍有接收作用
            }
        }
    }
}

多態(tài)參數(shù)問(wèn)題

基本介紹:

方法定義的形參類型為父類類型,實(shí)參類型允許為子類類型

應(yīng)用實(shí)例1:前面的主人喂動(dòng)物

應(yīng)用實(shí)例2:

定義員工類Employee,包含姓名和月工資【prvate】,以及計(jì)算年工資getAnnual的方法。普通員工和經(jīng)理繼承了員工,經(jīng)理類多了獎(jiǎng)金bonus屬性和管理manage方法,普通員工類多了work方法,普通員工和經(jīng)理類要求分別重寫(xiě)getAnnual方法

測(cè)試類中添加一個(gè)方法showEmpAnnal(Employee employee),實(shí)現(xiàn)獲取任何員工對(duì)象的年工資,并在main方法中調(diào)用該方法【employee.getAnnual()】

測(cè)試類中添加一個(gè)方法,testWork,如果是普通員工,則調(diào)用work方法,如果是經(jīng)理,則調(diào)用manage方法

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployParameter;

public class PloyParameter {
? ? public static void main(String[] args) {
? ? ? ? Worker worker = new Worker("???, 18168);
? ? ? ? testWork(worker);
? ? ? ? double v = showEmpAnnual(worker);
? ? ? ? System.out.println(v);
? ? ? ? System.out.println("=================經(jīng)理===============");
? ? ? ? Manager manager = new Manager("明天", 81688, 100000);
? ? ? ? testWork(manager);
? ? ? ? double v1 = showEmpAnnual(manager);
? ? ? ? System.out.println(v1);
? ? }
? ? public static double showEmpAnnual(Employee employee){
? ? ? ? return employee.getAnnual();
? ? }
? ? public static void testWork(Employee employee){
? ? ? ? if (employee instanceof Worker){
? ? ? ? ? ? Worker worker = (Worker) employee;
? ? ? ? ? ? worker.work();
? ? ? ? }else if (employee instanceof Manager){
? ? ? ? ? ? Manager manager = (Manager) employee;
? ? ? ? ? ? manager.manage();
? ? ? ? }else {
? ? ? ? ? ? System.out.println("您輸入的類型有誤!");
? ? ? ? }
? ? }
}

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployParameter;

public class Employee {
? ? private String name;
? ? private double salary;
? ? public Employee() {
? ? }
? ? public Employee(String name,double salary){
? ? ? ? this.name = name;
? ? ? ? this.salary = salary;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
? ? public double getSalary() {
? ? ? ? return salary;
? ? }
? ? public void setSalary(double salary) {
? ? ? ? this.salary = salary;
? ? }
? ? //計(jì)算年工資getAnnual方法
? ? public double getAnnual(){
? ? ? ? return salary*12;
? ? }
}

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployParameter;

public class Worker ?extends Employee{
? ? public Worker() {
? ? }
? ? public Worker(String name, double salary) {
? ? ? ? super(name, salary);
? ? }
? ? //普通員工work方法
? ? public void work(){
? ? ? ? System.out.println("普通員工打工干活");
? ? }
? ? public double getAnnual(){
? ? ? ? return getSalary()*12;
? ? }
}

package JAVA面向?qū)ο笾屑?jí)部分.encapsulationAndInherit.ployParameter;

public class Manager extends Employee{
? ? private double bonus;
? ? public Manager(String name,double salary){
? ? ? ? super(name,salary);
? ? }
? ? public Manager(double bonus) {
? ? ? ? this.bonus = bonus;
? ? }
? ? public Manager(String name, double salary, double bonus) {
? ? ? ? super(name, salary);
? ? ? ? this.bonus = bonus;
? ? }
? ? //管理方法
? ? public void manage(){
? ? ? ? System.out.println("經(jīng)理放屁了");
? ? }
? ? public double getAnnual(){
? ? ? ? return getSalary()*12 + bonus;
? ? }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java警告:源發(fā)行版17 需要目標(biāo)發(fā)行版17問(wèn)題及解決

    java警告:源發(fā)行版17 需要目標(biāo)發(fā)行版17問(wèn)題及解決

    文章介紹了如何解決項(xiàng)目JDK版本不一致的問(wèn)題,包括修改Project Structure、Modules、Dependencies和Settings中的JDK版本,以及在pom.xml中指定JDK源版本
    2024-11-11
  • MybatisPlus逆向工程的項(xiàng)目實(shí)踐

    MybatisPlus逆向工程的項(xiàng)目實(shí)踐

    Mybatis-Plus逆向工程,是MP官方提供的一款代碼生成器,可以自動(dòng)生成對(duì)應(yīng)的實(shí)體類、Mapper接口和配置文件,,本文主要介紹了MybatisPlus逆向工程的項(xiàng)目實(shí)踐,感興趣的可以了解一下
    2024-03-03
  • SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流

    SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流

    這篇文章主要介紹了SpringCloud Zuul過(guò)濾器和谷歌Gauva實(shí)現(xiàn)限流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • springboot @ComponentScan注解原理解析

    springboot @ComponentScan注解原理解析

    這篇文章主要介紹了springboot @ComponentScan注解原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • EasyExcel讀寫(xiě)、模板填充、Web上傳下載入門(mén)到實(shí)戰(zhàn)全指南

    EasyExcel讀寫(xiě)、模板填充、Web上傳下載入門(mén)到實(shí)戰(zhàn)全指南

    EasyExcel類是一套基于Java的開(kāi)源Excel解析工具類,相較于傳統(tǒng)的框架如Apache poi、jxl等更加快速、簡(jiǎn)潔,還可以解決大文件內(nèi)存溢出問(wèn)題,這篇文章主要介紹了EasyExcel讀寫(xiě)、模板填充、Web上傳下載入門(mén)到實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • 如何通過(guò)海康威視設(shè)備網(wǎng)絡(luò)SDK進(jìn)行Java二次開(kāi)發(fā)攝像頭車牌識(shí)別詳解

    如何通過(guò)??低曉O(shè)備網(wǎng)絡(luò)SDK進(jìn)行Java二次開(kāi)發(fā)攝像頭車牌識(shí)別詳解

    這篇文章主要介紹了如何通過(guò)??低曉O(shè)備網(wǎng)絡(luò)SDK進(jìn)行Java二次開(kāi)發(fā)攝像頭車牌識(shí)別的相關(guān)資料,描述了如何使用??低曉O(shè)備網(wǎng)絡(luò)SDK進(jìn)行車牌識(shí)別和圖片抓拍的開(kāi)發(fā)流程,包括遇到的問(wèn)題及其解決辦法,需要的朋友可以參考下
    2025-02-02
  • SpringBoot?熱搜與不雅文字過(guò)濾的實(shí)現(xiàn)

    SpringBoot?熱搜與不雅文字過(guò)濾的實(shí)現(xiàn)

    本文主要介紹了SpringBoot?熱搜與不雅文字過(guò)濾的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 基于Java代碼操作Redis過(guò)程詳解

    基于Java代碼操作Redis過(guò)程詳解

    這篇文章主要介紹了基于Java代碼操作Redis過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • HttpClient實(shí)現(xiàn)文件上傳功能

    HttpClient實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了利用HttpClient實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringMVC 方法四種類型返回值總結(jié)(你用過(guò)幾種)

    SpringMVC 方法四種類型返回值總結(jié)(你用過(guò)幾種)

    這篇文章主要介紹了SpringMVC 方法四種類型返回值總結(jié)(你用過(guò)幾種),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05

最新評(píng)論

建德市| 潜江市| 涪陵区| 丰宁| 镇平县| 石景山区| 滦平县| 云阳县| 登封市| 璧山县| 黄浦区| 满洲里市| 葵青区| 封开县| 东方市| 珠海市| 万盛区| 资兴市| 石首市| 阜平县| 英吉沙县| 湘潭县| 淮安市| 澎湖县| 仙居县| 思茅市| 都昌县| 赤水市| 宁蒗| 长寿区| 化隆| 岱山县| 东安县| 万宁市| 理塘县| 昌吉市| 株洲市| 临西县| 博爱县| 兴海县| 梅河口市|