2018.01.15多态复习之一

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" }

覆盖:由于父类的某些方法不适用于子类,所以子类需要重写方法,

以覆盖(override)父类的方法。

重写和重载有什么区别?

重载是指在同一个类中有多个同名方法,但是参数类型不同,重写是指父类的

某些方法不适用于子类,而需要子类来重写父类方法,且覆盖父类方法的过程,

特点是参数和方法与父类重名。

重载:
public class Dog1{
    Dog1(){
        this.bark();
    }
    void bark(){
        System.out.println("no barking!");
        this.bark("famele",3.4);
    }
    void bark(String m,double l){
        System.out.println("a barking dog!");
        this.bark(5,"China");
    }
}

重写:
class Manager extends Employee{
    private double bonus=1500;

    public Manager(String name,int age,double salary,double bonus){
        super(name,age,salry);
        this.bonus=bonus;
    }

    public void setBonus(double bonus){
        this.bonus=bonus;
    }
    public int getBonus(){
        return bouns;
    }

    //覆盖父类方法getMothlyIncome()方法
    @Override
    public double getMothlyIncome(){
        return this.getSalary()+this.bonus;
    }
}
//延续昨天的代码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 18.0px "PingFang SC"; color: #333333; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "Courier New"; color: #000000 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "Courier New"; color: #000000; min-height: 14.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "Courier New"; color: #008000 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px "Courier New"; color: #000000 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "Courier New"; color: #0000ff }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "PingFang SC"; color: #008000 }
span.s1 { font: 18.0px Verdana }
span.s2 { }
span.s3 { color: #0000ff }
span.s4 { color: #000000 }
span.s5 { font: 12.0px "PingFang SC" }
span.s6 { font: 12.0px "Courier New" }

其中覆盖的要求如下:

1)匹配方法接口的要求

子类中定义的新方法和父类中定义的方法要返回值类型、名称、参数列表上保持一致,才叫覆盖。

说明:

Java 5.0添加了对协变返回类型的支持,即子类覆盖(即重写)基类方法时,返回的类型可以是基

类方法返回类型的子类。协变返回类型允许返回更为具体的类型。

import java.io.ByteArrayInputStream;
import java.io.InputStream;

class Base
{
    //子类Derive将重写此方法,将返回类型设置为InputStream的子类
   public InputStream getInput()
   {
      return System.in;
   }
}
public  class Derive extends Base
{

    @Override
    public ByteArrayInputStream getInput()
    {

        return new ByteArrayInputStream(new byte[1024]);
    }
    public static void main(String[] args)
    {
        Derive d=new Derive();
        System.out.println(d.getInput().getClass());
    }
}
/*程序输出:
class java.io.ByteArrayInputStream
*/

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "PingFang SC"; min-height: 25.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 12.0px "Courier New"; color: #008000; min-height: 14.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "PingFang SC"; color: #000000 }
span.s1 { font: 18.0px "Courier New" }
span.s2 { }
span.s3 { font: 12.0px "PingFang SC"; color: #008000 }

2)可选的Override标注

javaSE5.0后,可用Override标注告诉编译器方法将要覆盖父类中的声明的方法。但Override标注

是可选的,添加它的目的主要让程序在编译时就能发现方法是否符合语法。

注意:

*子类的覆盖方法不能具有更小的可访问范围;

*子类的覆盖方法不能抛出比父类更多的异常;

一般都让子类的覆盖方法的声明形式和父类的覆盖方法完全相同(一般让方法体或返回方式内容有所不同),

并添加Override标注。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "PingFang SC"; color: #000000 }
span.s1 { }

当直接通过子类对象来调用这种被覆盖的后的方法时,真实的调用到的是子类自己重新定义的方法,永远不会是

调用到父类中的这个方法。如果在子类中还想调用父类中被覆盖的的方法,则需要用到super来显式调用。

/*类方法的隐藏实例*/
public class HideStaticMethodTest{
    public static void main(String[] args) {
        //使用对象变量的调用父子类中的同名的类方法————建议使用类名来调用
        //使用对象变量调用的是对象变量声明的类型(ClassA)中的类方法
        ClassA a2=new ClassB();
        //上面的代码怎么使用的来着?使用规则如何?父类名 引用对象=new 子类名();
        a2.staticMethod();
    }
}

class ClassA{
    public static void staticMethod(){
        System.out.println("ClassA.test方法");
    }
}

class ClassB extends ClassA{
    //声明了一个与父类同名的方法
    public static void staticMethod(){
        System.out.println("ClassB.test方法");
    }
}
/**运行结果:
*ClassA.test方法
*/

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 24.0px "PingFang SC"; color: #000000 }
span.s1 { font: 24.0px "Courier New" }
span.s2 { }

//对于运行结果有点不理解?还有类方法指是什么?

原文地址:https://www.cnblogs.com/shijinglu2018/p/8290365.html

时间: 2024-10-15 20:03:54

2018.01.15多态复习之一的相关文章

【谜客帝国】第137届雪山飞狐主擂谜会(2018.09.15)

[谜客帝国]第137届雪山飞狐主擂谜会(2018.09.15) 主持:瓷   计分:小沪 01.江畔和风临,村前白杨飘(3字中药方剂)枫香汤 02.“天堑变通途”(2字世界体育组织简称)桥联 [注:面出毛[泽]东<水调歌头·游泳>,承上句“一桥飞架南北”.] 03.“彩蟾特地中宵出”(3字纺织品)夜光布 [注:面出宋·曹勋<鹧鸪天>,彩蟾,月亮别称.] 04.停船靠岸处,乃是第一墟(3字河北地名)泊头市 05.山松弄影塘边立(3字清末历史人物)唐景崧 06.“子房以盖世之才”(3字

WPF 使用鼠标拖动一个控件的实现[2018.7.15]

原文:WPF 使用鼠标拖动一个控件的实现[2018.7.15] Q:已经把一个Shape和一个TextBlock组合起来放到了一个Grid中,现在想要实现用鼠标拖动这个Grid到任意位置的功能,如何做? <Grid Height="50" Width="50"> <Ellipse Fill="Yellow" Stroke="Blue" Height="50" Width="50&

【谜客帝国】第139届微雨潇潇联想专场(2018.10.15)

[谜客帝国]第139届微雨潇潇联想专场(2018.10.15) 主持:瓷   计分:小白 1.本季重逢在帝国  只身东海挟春雷 乐天曲江之感怀 一段新愁染眉弯 5 今秋复来此 2.寒蛩轻唱送微凉  萧萧梧叶诉离情 白帝有语怜高洁 夜夜龙泉壁上鸣 4 此秋声也 3.人至中年心淡然  我言此季胜春潮 春愁夏恨冬烦忧 吟风作赋只伤春 4 不是悲秋 4.菊残犹有傲霜枝  立冬尚见黄叶飞 子夜歌里玉关情 竞雄洒血化碧涛 5 秋风吹不尽 5.轻寒最是可人天  貂裘换酒也堪豪 姑苏城外寒山寺 斋中结社咏海棠 

【谜客帝国】第145届芭比娃娃主擂谜会(2019.01.15)

[谜客帝国]第145届芭比娃娃主擂谜会(2019.01.15) 主持:瓷   计分:默沫 1. 同心十八载,白首居河东(2字2019亚洲杯中国球员)石柯 2. 王朗气极坠地死(3字方位字)骂下马 [注:典据<三国演义>93回,“王朗听罢,气满胸膛,大叫一声,撞死于马下.”] 3. 城头长弓搭白羽(2字宋词人)张翥 4. 重门折屐未曾进(成语)格格不入 [注:重门.折屐,皆为谜格.] 5.“石城古岸头”(2字国家森林公园)圭山 6. 凯撒大帝显露出愤怒(4字<诗经>名句)七月流火 [

【谜客帝国】第143届月思主擂谜会(2018.12.15)

 [谜客帝国]第143届月思主擂谜会(2018.12.15) 主持:瓷  计分:默沫 1.“六根清净几人有”(6笔字)伉/月思 [注:面出黄若初<访山寺偶成>,“?,一世荣华百岁无.”] 2. 数点霁霞山外断(3字足球术语)541/月思 3.“鸟上残花枝畔啼”(11笔字)菌/月思 [注:面出谢宗万<道中即景>,“客临古渡岸前望,?.”] 4.“白屋风光难入眼”(列人二,2+2)舍之.景差/月思 [注:面出黄东<山居抚琴>,“?,任凭曲韵释忧愁.”] 5.“任凭曲韵释忧愁

【谜客帝国】第141届幽谷寒梅主擂谜会(2018.11.15)

 [谜客帝国]第141届幽谷寒梅主擂谜会(2018.11.15) 主持:幽谷寒梅  计分:渣渣 1.捧来一掬春,三人分一分(字)拘 2.“薄技在身,胜握千金”(6字爆料某知名演员境况)陈小艺超有钱 3.但觉纣王仁心无存(6字旅游语,含吉林地名)感受德惠风光 [注:纣王名受(一作受德).惠风:仁心.仁政,汉张衡 <东京赋>:“惠风广被,泽洎幽荒.”] 4.并未让其交代(4字比较语,含古尊称)没令坦白 5.“白发垂项,佝偻携杖”(知名谜人专职,掉尾格)老罗背锅 6.毋为威武动屈心(南北朝人物)莫折

Java(15) 多态

一.多态  1.1 多态:一个事物的多种形态  1.2 多态的表现 行为(方法)多态:重写和重载. 引用多态(动态绑定):编译时的类型和运行时不一致的这种现象 例:父类 = 子类 Pet p = new Dog(); 向上转型:父类=子类 例:Pet p = new Dog(); 向下转型:子类 = (子类)父类 例: Dog d = (Dog)p; 1 public abstract class Pet { 2 private String name; 3 private int health

java新手笔记15 多态

1.Animal类 package com.yfs.javase; public class Animal { public void cry() { System.out.println("动物叫..."); } } 2.Dog/Cat/Bird类 package com.yfs.javase; public class Dog extends Animal { public void cry() { System.out.println("汪 汪..."); }

2015.01.15(android AsyncTask)

参考网址:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 1 /* 2 * Params 启动任务执行的输入参数,比如HTTP请求的URL. 3 * Progress 后台任务执行的百分比. 4 * Result 后台执行任务最终返回的结果,比如String 5 * 6 * doInBackground(Params…) :后台执行,比较耗时的操作都可以放在这里.注意这里不能直接操作UI. 7 * 此方法在后台线