欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的動態(tài)綁定機制

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

JAVA動態(tài)綁定機制(非常非常重要)

JAVA動態(tài)綁定機制:動態(tài)綁定是與運行類型進行綁定

1.當調用對象方法的時候,該方法會和該對象的內存地址/運行類型(也就是與運行類型)綁定(意思就是如:有一個Cat類,Cat類中有一個cay方法,這個方法會和Cat類發(fā)生動態(tài)綁定)

2.當調用對象屬性時,沒有動態(tài)綁定機制,哪里聲明,哪里使用

package JAVA面向對象中級部分.encapsulationAndInherit.binding;
public class DynamicBinding {
    public static void main(String[] args) {
        A a  = new B();//向上轉型
        //當注釋了B類中的sum()方法和sum1()方法結果變?yōu)榱?0和20
        System.out.println(a.sum());//40 --》30
        System.out.println(a.sum1());//30 --》20
    }
}
class A{//父類
    public int i = 10;
    //由于調用方法時,方法會和該對象的內存地址(也就是運行類型)綁定
    //由于運行類型是B,所以查找是從B類方法開始查找,要因為B類中的getI()方法,直接返回屬性i,屬性沒有動態(tài)綁定機制,因此直接返回20
    public int sum(){
        return getI()+10;
    }
    //方法是有動態(tài)綁定機制,所以查找時,先從子類B查找,由于B類沒有sum1方法,
    //繼承查找父類,父類有則調用sum1方法,要因為sum1方法返回是屬性i,屬性沒有動態(tài)綁定機制直接返回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)應用

基本介紹:

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

案例:

1.現有一個繼承結構如下:要求創(chuàng)建一個Person對象,2個Student對象和2個Teacher對象,統(tǒng)一放在數組中。并調用msay方法。

2.應用實例升級,如何調用子類特有的方法,比如Teacher有一個teach,Student有一個study怎么調用?

package JAVA面向對象中級部分.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面向對象中級部分.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){
        //注意在構造器中使用super和this調用構造器完成初始化,兩者只能出一個并且放在第一條語句
        super(name,age);
//        this(name,age);
        this.score =score;
    }
    public String say(){
        return super.say()+"\t成績:"+score;
    }
    public void study(){
        System.out.println("學生:"+getName()+"正在學習JAVA課程!");
    }
}
package JAVA面向對象中級部分.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面向對象中級部分.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)數組,調用say
        for (int i = 0; i < people.length; i++) {
            //person[i]編譯類型是Person,運行類型是根據實際情況有JV來判斷
//            System.out.println(people[i].say());//動態(tài)綁定機制
            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());//在類型轉換時,范圍大的一定要放在后面,要不大的對小范圍有接收作用
            }
        }
    }
}

多態(tài)參數問題

基本介紹:

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

應用實例1:前面的主人喂動物

應用實例2:

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

測試類中添加一個方法showEmpAnnal(Employee employee),實現獲取任何員工對象的年工資,并在main方法中調用該方法【employee.getAnnual()】

測試類中添加一個方法,testWork,如果是普通員工,則調用work方法,如果是經理,則調用manage方法

package JAVA面向對象中級部分.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("=================經理===============");
? ? ? ? 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面向對象中級部分.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;
? ? }
? ? //計算年工資getAnnual方法
? ? public double getAnnual(){
? ? ? ? return salary*12;
? ? }
}

package JAVA面向對象中級部分.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面向對象中級部分.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("經理放屁了");
? ? }
? ? public double getAnnual(){
? ? ? ? return getSalary()*12 + bonus;
? ? }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Elasticsearch查詢Range Query語法示例

    Elasticsearch查詢Range Query語法示例

    這篇文章主要為大家介紹了Elasticsearch查詢Range Query語法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 詳解spring cloud config實現datasource的熱部署

    詳解spring cloud config實現datasource的熱部署

    這篇文章主要介紹了詳解spring cloud config實現datasource的熱部署,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring外部化配置的幾種技巧分享

    Spring外部化配置的幾種技巧分享

    在油管上看了龍之春的一個Spring tips 視頻,講述Spring外部化配置的幾種技巧,收獲頗多,想拿出來給大家分享下。對spring感興趣的朋友可以了解下本文
    2021-06-06
  • 使用Spring Security控制會話的方法

    使用Spring Security控制會話的方法

    在本文中,我們將說明Spring Security如何允許我們控制HTTP會話。這篇文章主要介紹了使用Spring Security控制會話 ,需要的朋友可以參考下
    2019-05-05
  • Servlet實現文件的上傳與下載

    Servlet實現文件的上傳與下載

    這篇文章主要為大家詳細介紹了Servlet實現文件的上傳與下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 基于mybatis?plus實現數據源動態(tài)添加、刪除、切換,自定義數據源的示例代碼

    基于mybatis?plus實現數據源動態(tài)添加、刪除、切換,自定義數據源的示例代碼

    這篇文章主要介紹了基于mybatis?plus實現數據源動態(tài)添加、刪除、切換,自定義數據源,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • springboot引用kettle實現對接oracle數據的示例代碼

    springboot引用kettle實現對接oracle數據的示例代碼

    這篇文章主要介紹了springboot引用kettle實現對接oracle數據,其實kettle集成到springboot里面沒有多少代碼,這個功能最主要的還是ktr文件的編寫,只要ktr編寫好了,放到指定文件夾下,寫個定時任務就完事了,需要的朋友可以參考下
    2022-12-12
  • Springboot實現驗證碼登錄

    Springboot實現驗證碼登錄

    這篇文章主要為大家詳細介紹了Springboot實現驗證碼登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Java Swing 多線程加載圖片(保證順序一致)

    Java Swing 多線程加載圖片(保證順序一致)

    這篇文章主要為大家詳細介紹了Java Swing 多線程加載圖片,保證順序一致,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringBoot2零基礎到精通之數據與頁面響應

    SpringBoot2零基礎到精通之數據與頁面響應

    SpringBoot是一種整合Spring技術棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架
    2022-03-03

最新評論