`
have_life
  • 浏览: 147969 次
社区版块
存档分类
最新评论

java中的重写 (override)

    博客分类:
  • java
 
阅读更多
父类
public abstract class A {
    public void sayHello(){
        System.out.println("sayHello in A");
    }

    public abstract void sayHi();
}



子类B
public class B extends A{
    @Override
    public void sayHi(){
        System.out.println("sayHi() in B");
    }
}



子类C
public class C extends A{
    @Override
    public void sayHi() {
        System.out.println("sayHi() in C");
    }
}


测试一下效果
public class Test {
    public static void main(String[] args){
        A a = new B();
        a.sayHello();
        a.sayHi();
        
        a = new C();
        a.sayHello();
        a.sayHi();
    }
}


结果是:
sayHello in A
sayHi() in B
sayHello in A
sayHi() in C


------
下面说下错误的写法。

在父类里没有写那个虚函数。
父类A
public abstract class A {
    public void sayHello(){
        System.out.println("sayHello in A");
    }
}


子类B
public class B extends A{
    public void sayHi(){
        System.out.println("sayHi() in B");
    }
}


测试
public class Test {
    public static void main(String[] args){
        A a = new B();
        a.sayHello();
        //a.sayHi();  这句话是会报错的。、
        //用父类指针指向子类,如果父类中没有这个方法,你即便指向的子类有这个方法
        //也没有办法用这个父类指针来调用这个方法。(如果你真的想要这么做,就必须要审明一个虚函数。)
    }
}
分享到:
评论
1 楼 have_life 2012-08-11  
上转型不是为了使用父类方法 而是子类通过重写父类的方法产生多态
比如trademark(Toyota a)这个方法结果输出toyota
如果你这样写 他只能接收Toyota类型
当你再有一个类还想要使用这种方法trademark(Honda b) 结果输出honda
如果你再有第三个类 还要接着加方法trademark(Volkswagen  c) ......
如果你有个这样的方法trademark(Car c) 然后通过子类重写 你N个子类继承父类 只需要这样上转型
trademark(n) Car n=new xxx();  trademark(Car c)一直不用变  可扩展性就很好了 
一般都这么理解吧 供参考


---
在百度知道中找到的。就是帮助理解向上转型。

整体的概念是叫多态。
多态的实现方式是是通过父类定义虚函数,子类继承重写方法。
然后父类指针引用子类(向上转型),调用方法。


这个用父类定义一个统一的接口,然后各个子类不同实现,最后调用的时候又用父类指针引用子类来统一调用。这个就是一种代码的flexibility。
通过上面那个车子的例子比较明显。就是如果加另外新的车,既不是honda,也不是toyota,比如奇瑞cherry吧,这样如果用了上面这种形式。
那么原来在调用的那块,如trademark(Car c)不用改。这就是一种扩展性。

相关推荐

    Java重写(Override)&重载(Overload).pdf

    Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 重写(Override)讲解 定义一个名为 Animal 的父类和一个名为 Cat 的...

    从虚拟机角度看Java多态->(重写override)的实现原理

    从虚拟机角度看Java多态->(重写override)的实现原理

    Java 重写(Override)与重载(Overload).pdf

    java

    Java重写(Override)与重载(Overload)区别原理解析

    主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java面向对象(进阶)- 四种权限测试与方法的重写(override-overwrite)

    Java面向对象(进阶)-- 四种权限测试与方法的重写(override_overwrite)

    java 重载,重写以及继承,多态的区别

    Java 中的重载、重写、继承和多态是四个不同的概念,它们之间存在一定的关系,但也存在明显的区别。 重载(Overload) 重载是指在同一个类中可以定义多个同名的方法,但这些方法的形参个数或类型必须不同。编译器...

    override abstract virtual interface比较

    override 关键字可以用来重写父类中的虚拟方法,以便在子类中提供自己的实现。在 C# 中,如果子类想要重写父类中的虚拟方法,必须使用 override 关键字,否则将不会编译通过。 在上面的代码中,我们可以看到 ...

    Java overload和override的区别分析

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,想要了解更多请参考本

    java 重载(overload)与重写(override)详解及实例

    主要介绍了java 重载(overload)与重写(override)详解及实例的相关资料,并附实例代码,需要的朋友可以参考下

    100家大公司java笔试题汇总.docx

    2. 在Java中,override和overload是两个不同的概念,override是指子类重写父类的方法,而overload是指同一个类中多个方法的名称相同但是参数列表不同的现象。 3. 在Java中,抽象类和接口是两种特殊的类,它们都不能...

    Java重载和重写的区别--源码实例

    // 不能Override父类中的方法,因为它抛出了比父类中非法范围 // 更大的异常。 //public void fun() throws Exception { // System.out.println("fun in OverrideTest1"); //} // 这个方法并没有Override父类...

    Java复习大纲面试题.doc

    方法重写(Override/Overwrite):是指子类重写了从父类继承过来的方法。 区别:方法重载没有继承、属于一种静态联编技术。 方法重写有继承、属于动态联编技术。 10.什么是抽象类?什么是接口?抽象类与接口的区别?

    重载与覆写/重写的区别

     在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。  但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。  方法重写又称方法覆盖。 (2)若子类中...

    Java100个面试题.doc

    Java中是否可以覆盖(override)一个private或者是static的方法?“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。Java中static方法不能被覆盖,因为方法覆盖是基于...

    java面试题

     方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和...

    Java面向对象多态.pdf

    子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。 例如: class Animal { public void move() { System.out.println("动物...

    java笔试题

    15、构造器(constructor)是否可被重写(override)? 16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 17、是否可以继承String类? 18、当一个对象被当作参数传递到一个方法后...

    Java零基础-继承.md

    熟悉使用@Override注解重写父类方法和使用super关键字调用父类方法。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和成员变量等概念。 在阅读过程中,尝试编写简单的Java程序,创建并使用...

    java学习笔记 - 10

    2.方法重写(override): 1)发生在父子类中,方法名相同,参数列表相同,方法体不同 2)重写方法被调用时,看对象的类型 3)重写需要遵循“两同两小一大”原则 3.重写与重载的区别:------------常见面试题

    Java中的final关键字详解及实例

    用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 public class ...

Global site tag (gtag.js) - Google Analytics