java学习之继承、重载、重写(覆盖)

java中使用extends关键字完成继承,和C++中的继承不同之处在于java只支持单继承,不支持多重继承。

继承让我们的代码编码变得简单,维护也变得简单,扩展变得容易。我们在继承的时候不能继承构造方法,一个类得到构造方法只有两种方法,一种是自己定义构造方法,一种是使用JVM分配的缺省构造方法。

方法名称相同,但是参数不一样的时候,这就是方法的重载:

  • 方法的重载返回值类型可以不一样
  • 方法的修饰符也可以不一样
  • main方法也可以被重载

方法重写:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。

  • 子类的方法名称返回类型及参数签名 必须与父类的一致
  • 子类方法不能缩小父类方法的访问权限
  •  子类方法不能抛出比父类方法更多的异常
  • 方法覆盖只存在于子类和父类之间,同一个类中只能重载
  • 父类的静态方法不能被子类覆盖为非静态方法
  • 子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(满足覆盖约束),    
  •             而且Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
  • 父类的非静态方法不能被子类覆盖为静态方法
  • 父类的私有方法不能被子类覆盖
  • 父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)
  • 父类的非抽象方法可以被覆盖为抽象方法

package www.fengkai.jicheng;
class A{
	public int a;
	public int b;
	public A(){
		a = 1;
		b = 2;
	}
	public  void tell() {
		System.out.println("a");
	}
	public void prin() {
		System.out.println(a + " " + b);
	}
}
class B extends A{
	public B(){
		a = 2;
		b = 3;
	}
	public  void tell() {
//		super.tell();
		System.out.println("b");
	}
}
public class Test01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B();
		b.tell();
		b.prin();
	}

}

定义两个类A和B,B类继承于A类,拥有A类中定义的变量和方法,而B类中的tell()方法就是对A类中的tell()方法的重写;

super关键字可以强行调用父类的方法执行,上述代码中,不注释super.tell()的话就会输出A类中的tell和B 类中的tell

  • 父类的成员变量和方法为private使用super访问编译出错
  • 在类的构造方法中,通过super语句调用这个类的父类的构造方法
  • 在子类种访问父类的被屏蔽的方法和属性
  • 只能在构造方法或实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。

    时间: 2024-10-16 08:33:12

    java学习之继承、重载、重写(覆盖)的相关文章

    Java学习之方法重载和方法重写(覆盖)比较

    方法重载和方法覆盖 请带着下面两点来看文章: 覆盖即重写,覆盖不等于重载,即重写不等于重载. 覆盖(重写)蕴含继承性,而重载只能在本类中使用,不含继承. 方法名和参数列表的比较 方法覆盖中的方法名和参数 首先创建基类Shape: public class Shape {   public void draw() { System.out.println("Shape.draw()"); } } 子类Circle: public class Circle extends Shape {

    C++多态,继承,重载,隐藏,覆盖的关系

    override->重写(=覆盖).overload->重载.polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法.成员函数的重载(overload).覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 1   重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中: (2)函数名字相同: (3)参数不同: (4)virtual  

    C++中的虚继承 & 重载隐藏覆盖的讨论

    虚继承这个东西用的真不多.估计也就是面试的时候会用到吧.. 可以看这篇文章:<关于C++中的虚拟继承的一些总结> 虚拟基类是为解决多重继承而出现的. 如:类D继承自类B1.B2,而类B1.B2都继承自类A,因此在类D中两次出现类A中的变量和函数.为了节省内存空间,可以将B1.B2对A的继承定义为虚拟继承,而A就成了虚拟基类.实现的代码如下: class A class B1:public virtual A; class B2:public virtual A; class D:public

    对比C++与Java中的函数重载、覆盖、和隐藏

                                      在C++中 1.函数的重载 C++中的函数的重载要求的是  函数名相同 参数列表必须不同  返回值类型可以相同也可以不相同:只有参数列表不相同,在函数调用时,编译环境才能准确抉择调用的是哪个函数.例如:void display():void display(int  i);void dispaly(double  i);void  display(int i,double i); void display(double  i,i

    Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继承的关键字:extends 格式如下: class 子类名 extends父类名{ ... } 例如 学生是继承人类这一父类的. class student extends person{ ... } 如果一个类的声明没有使用关键字extends,则这个类默认是继承Object类的.Object是所

    Java中方法的重载与覆盖(随笔01)

    方法重载(Overlord) .方法重载:指在同一个类中,允许在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关(例如:构造方法重载). .参数列表:个数不同,数据类型不同,顺序不同: .重载方法调用:JVM通过方法的参数列表,调用不同的方法. 上面的三种方法在同一类中的前提下是,重载 方法覆盖(Override)(又叫方法重写) .方法覆盖:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表相同),会出现覆盖,重写效果.声明不变,重新实现. .注意事项 1.

    Java基础知识(重载和覆盖)

    重载(overload): 在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了. 即当函数同名时,只看参数列表.和返回值类型没关系. 重载使用的时候需要注意: 1.在使用重载时只能通过不同的参数样式.例如,不同的参数类型,不同的参数个数,不同的参数顺序. 2.方法的异常类型和数目不会对重载造成影响. 3.对于父类来说,子类可以重载与继承父类中的方法同名的方法,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重

    java中方法的重载和覆盖分别要满足的条件

    1.重载:遵循“两同三不同” 两同:同一个类中的同名方法 三不同:形参的类型,个数,顺序不同 特别提醒: 返回值不同构不能方法重载 形参名称不同构不成方法重载 2.覆盖(重写)的要求 子类方法的名称,返回类型必须与父类一致. 子类方法不能缩小父类方法的访问权限 子类方法不能抛出比父类方法更多的异常 方法覆盖只存在于子类和父类,同一个类中方法只能被重载 父类的静态方法不能被子类覆盖 子类可以定义与父类的静态方法同名的静态方法 父类的非静态方法不能被子类覆盖为静态方法 父类的私有方法不能被子类覆盖

    java知识点回顾——继承、重写、重载、多态

    1.继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.修饰符 class 子类名 extends 父类名super.方法名(参数列表); 2.重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 简单说就是子类重新定义方法. 3.重载(overloading) 是在一个类里面,方法名字相同,而参数不同.返回类型可以相同也可以不同. 4.多态是同一个行为具有多个不同表现形式或形态的能力.