• 继承多态


    在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

    源代码

    package Super;

    public class Super {

    public static void main(String args[]) {

    String title="恭贺新春";

    String content=" 岁岁平安 身体健康 万事如意 ";

    ChristmasCard card=new ChristmasCard(title,content);

    card.showCard();

    //Card ca=new Card();

    //Card();

    }

    }

    class Card{

    String title;

    Card(){

    title="Happy new year";

    //System.out.println(title);

    }

    Card(String title){

    this.title=title;

    }

    public String getTitle() {

    return title;

    }

    }

    class ChristmasCard extends Card

    {

    String content;

    ChristmasCard(String title,String content){

    //super();

    super(title);//用super调用父类的Card(title);

    this.content=content;

    }

    public void showCard()

    {

    System.out.println(" "+getTitle());

    System.out.printf("%s",content);

    }

    }

    运行结果

    类型转换

    源代码

    package Duotai;

    class Mammal{}

    class Dog extends Mammal {}

    class Cat extends Mammal{}

    public class TestCast

    {

    public static void main(String args[])

    {

    Mammal m = null;

    Dog d=new Dog();

    Cat c=new Cat();

    //Mammal m=new Mammal();

    m=d;//可以直接将子类对象付给父类

    //d=m;//不能将父类对象付给子类

    d=(Dog)m;//父类强制转换成子类

    //d=c;//子类直接不能转换

    //m=c;

    c=(Cat)m;//如果没有m=c;就不能将m转换为cat类型

    }

    }

    运行结果

    运行以下代码

    猜测结果

    100

    200

    200

    200

    201

    源代码

    package Duotai;

    //import Duotai1.Parent;

    public class ParentChildTest {

    public static void main(String[] args) {

    Parent parent=new Parent();

    /*Parent parent2=new Parent();

    parent2=parent;*/

    parent.printValue();//100

    Child child=new Child();

    child.printValue();//200

    parent=child;

    /*

     * 将parent类中的myValue值设定为static

     * 然后执行parent.myValue++;

     * 创建新父类parent2,调用printValue();函数

     * 最终可以看出parent中的 myValue值变为101

     * */

    parent.myValue++;//将父类的myValue进行了+1操作

    Parent parent2=new Parent();

    parent2.printValue();//101

    //child.myValue++;

     /*

      * 在有child.myValue++;之后parent.printValue();输出的201

      * 没有调用child.myValue++时,parent.printValue();输出的是200

      * */

    parent.printValue();//调用的是Child.printValue()

    child.printValue();//200

    ((Child)parent).myValue++;//等价于child.myValue++;

    parent.printValue();//201

    child.printValue();//201

    }

    }

    class Parent{

    public static int myValue=100;

    public void printValue() {

    System.out.println("Parent.printValue(),ParentValue="+myValue);

    }

    }

    class Child extends Parent{

    public int myValue=200;

    public void printValue() {

    System.out.println("Child.printValue(),ChildValue="+myValue);

    }

    }

    运行结果

    1)当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

    2)这个特性实际上就是面向对象“多态”特性的具体表现。

    3)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

    4)如果子类被当作父类使用,则通过子类访问的字段是父类的!

  • 相关阅读:
    知识搜索
    使用 getopt() 进行命令行处理
    【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 大V综合交流区 360论坛
    搜狗知立方高调亮相 开启知识计算新时代
    socat: Linux / UNIX TCP Port Forwarder
    Crontab 每两周执行一次
    python 命令行解析 optionparser
    crontab jojo's blog--快乐忧伤都与你同在 BlogJava
    搜索引擎开始「实体搜索」新领域竞争,Google、百度分别发力实体搜索产品
    netcat(nc)的替代产品 Socat
  • 原文地址:https://www.cnblogs.com/0710whh/p/7809929.html
Copyright © 2020-2023  润新知