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

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)与重载(Overload)。这两个概念在面向对象编程中非常重要,尤其是在Java这样的语言中。 ### Java中的重写(Override) #### 什么是重写? ...

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

    Java中的重写(Override)和重载(Overload)是面向对象编程中的两个核心概念,它们都是为了提高代码的灵活性和可复用性。 **重写(Override)** 是指子类能够重新定义父类中非私有(public或protected)的方法,以便在...

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

    在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java如何通过方法重写来实现多态。 首先,理解Java的类加载机制对于解析多态性至关重要。当Java...

    静态(static)方法重写(override)

    在面向对象编程语言中,如Java,方法重写(override)是一种重要的特性,它允许子类提供一个与父类相同签名的方法实现。这种方法的实现允许在运行时根据对象的实际类型来确定调用哪个版本的方法,这正是多态性的基础...

    JAVA中的方法重写与方法重载区别

    方法重写(Override)是指在子类中定义的一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,这样可以重写父类的方法。在方法重写中,子类可以对父类的方法进行修改或扩充...

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

    Java重写(Override)与重载(Overload)区别原理解析 Java 编程语言中有两个重要的概念:重写(Override)和重载(Overload)。这两个概念经常被混淆,但它们具有不同的作用和特点。本文将详细地介绍 Java 中的重写和...

    Java重写和重载概念及区别梳理

    在编程语言中,Java的重写(Override)和重载(Overload)是两个非常重要的概念,它们在类与对象的多态性中起到关键作用。理解并掌握这两个概念是成为一名合格的Java开发者的基础。 首先,我们来谈谈重写(Override...

    java中的重载和重写的区别

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们体现了Java的多态性。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。 首先,让我们详细解释一下方法的重载。重载...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    Java 继承和方法重写

    Java 继承是面向对象编程中的一个核心概念,它允许一个类(子类或派生类)从另一个类(父类或基类)继承特性,从而实现代码的复用和扩展。方法重写则是继承机制中一个关键的特性,允许子类对父类的方法进行定制化,...

    Java重写.docx

    Java重写知识点详解 Java中的重写(Override)和重载(Overload)是两个重要的概念,它们都是指方法的定义方式,但是它们之间存在着明显的区别。 方法的重载 在同一个类中,可以定义多个方法,它们的方法名相同,...

    java子类重写父类的方法.doc

    在Java编程语言中,子类继承父类后,可以通过重写(Override)的方式改变或扩展父类的行为。本文将深入探讨Java中子类如何正确地重写父类的方法,并详细介绍重写的六大规则。 #### 一、重写概述 重写(Override)...

    java中重载与重写

    在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的概念。它们虽然只有一字之差,但其实质却大相径庭。理解这两者的不同对于深入掌握Java语言至关重要。 ### 一、重载(Overloading...

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

    三、方法的重写(overwrite / override) 1. **引入**:方法的重写发生在子类中,当子类继承父类并需要改变或扩展父类的方法行为时。重写的方法必须与被重写的方法有相同的返回类型、名称和参数列表。 2. **举例**:...

    详解Java中@Override的作用

    在Java编程语言中,`@Override` 是一个重要的注解,它的主要作用是明确标识一个方法是重写了其父类中的方法。这个注解在代码的可读性和编译时的错误检查方面提供了显著的优势。下面我们将深入探讨`@Override` 的作用...

    分享一下@Override标签背后的小秘密

    Java 中的@Override标签的深入理解 @Override标签是一个非常重要的标签,但是一般情况下,我们只是知道它的基本用途,即用于标记方法的重写。但是,这个小小的标签蕴藏着很多有趣的秘密。今天,我们就来深入探讨...

    java中重载与重写的区别.pdf

    Java 中重载与重写的区别 Java 中的重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是 Java 语言中实现多态性的手段。 方法重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的...

    java中重载与重写的区别

    Java 中的重载(Overloading)与重写(Overriding)是两个重要的概念,它们都是实现多态性的重要方式,但两者之间存在着显著的区别。 **重载(Overloading)** 重载是指在同一个类中可以有多个同名方法,但这些...

    java方法重写实例分析

    Java方法重写是面向对象编程中的一个重要概念,它允许子类根据需要修改或扩展从父类继承而来的行为。在Java中,当一个子类创建了与父类中相同名称、参数列表和返回类型的方法时,我们就说这个子类重写了父类的方法。...

    Java overload和override的区别分析

    Java中的方法重载(Overloading)和重写(Overriding)是两个重要的概念,它们都是实现多态性的方式,但有着本质的区别。 1. **方法重载(Overloading)**: 方法重载是指在同一个类中可以有多个同名方法,但这些方法的...

Global site tag (gtag.js) - Google Analytics