Java--父类的引用指向子类的对象详解!

例:

  第一步.创建一个Person类

package com.maya.ball;

public class Person {
    private int age;
    private String name;

    public Person(int age,String name){
        this.age = age;
        this.name = name;
    }

    public void speak(){

    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

  第二步.创建American类继承Person类。

package com.maya.basketball;

import com.maya.ball.Person;

public class American extends Person {
    public double height;-----------------------------新增成员变量

    public American(int age,String name,double height){
        super(age, name);
        this.height = height;

    }
    public void speak(){
        System.out.println("我年龄:"+ this.getAge() +",我叫:"+getName()+",我身高:"+height);
    }
}

  第三步.创建Chinese类,同意继承Person类

package com.maya.football;

import com.maya.ball.Person;

public class Chinese extends Person{

    private String sex;-------------------新增成员变量

    public Chinese(int age, String name,String sex) {
        super(age, name);
        this.sex = sex;
    }

    public void speak(){
        System.out.println("我年龄:"+ getAge() +",我叫:"+ this.getName() +",我性别:"+sex);
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

  第四步.创建Test1类,通过show方法把Person的对象作为参数传进去

package com.maya.test;

import com.maya.ball.Person;
import com.maya.basketball.American;
import com.maya.football.Chinese;

public class Test1 {
    public void show(Person per){
        if(per instanceof American){
            American am = (American) per;
            System.out.println(am.height);
        }
        if(per instanceof Chinese){
            Chinese ch = (Chinese) per;
            System.out.println(ch.getSex());
        }
    }
}

  第五步.创建Main方法进行调用

package com.maya.test;

import com.maya.ball.Person;
import com.maya.basketball.American;
import com.maya.football.Chinese;

public class Main1 {
    public static void main(String[] args){
        Person per = new American(32,"小明",175);
        American american = (American) per;
        double s = american.height;
        System.out.println(s);

        Person ame = new American(32,"小明",180);
        ame.speak();
        Person chinese = new Chinese(23,"小李","女");
        chinese.speak();
        Test1 t = new Test1();
        t.show(ame);
        t.show(chinese);

    }

}
时间: 2024-12-28 20:52:57

Java--父类的引用指向子类的对象详解!的相关文章

父类的引用指向子类的对象

1.Father.java package com.ljb.extend; public class Father {  public int x = 10;  public int fGet() {   return x;  } } 2.Son.java package com.ljb.extend; public class Son extends Father {  // 不能出现与父类同名属性  public int a = 100;  public int fGet() {   Sys

父类的引用指向子类的对象或者接口指向实现类均是可以的

父类的引用指向子类的对象或者接口指向实现类均是可以的. 例如(下图为父类的引用指向子类的对象) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Father {         public void pri() {             System.out.println("father");         } } public class Sun   extends  Father{       public void 

父类引用指向子类的对象;

public class Tuzi {         //父类  public String name; public void show(){   System.out.println(name+"是个笨蛋");  }  public Tuzi(){     }  public Tuzi(String name){   this.name=name;   } public void setname(String name){   this.name=name;  }  public

JAVA父类引用指向子类的对象意思

类A,另外一个类B继承了类A.有如下代码:A a = new B() ; 这就称父类的引用a 指向了子类的对象new B(); 假如你的A是一个接口,或者抽象类,那么是不可以创建对象的,这样写就可以也能够它的引用去指向他子类或者实现类的对象.这句话写在这里感觉不明显.其实主要是用在方法的参数上,也就是多态性(java的三大特性之一,可想何等重要),为了让你理解深刻,我举个例子.假如有一个类,这个类需要实现吃各种水果,有香蕉,苹果,梨子等等.我们是不是就得写:public void eat(Ban

java父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

java多态,如何理解父类引用指向子类对象

摘录 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 表示定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的. 那么这样做有什么意义呢?因为子类是对父类的一个改进

理解父类引用指向子类对象

java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向C

【转】父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

父类引用指向子类对象

1 public class Test { 2 /** 3 * 对于多态,可以总结它为: 4 5 一.使用父类类型的引用指向子类的对象: 6 7 二.该引用只能调用父类中定义的方法和变量: 8 9 三.如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法:(动态连接.动态调用) 10 11 四.变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错. 12 13 多态的3个必要条件: 14 15 1.继承 2.重写