java中继承相关

java继承

在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。被继承的类称为父类(超类,父类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。Java中只能单继承,也就是说每个类只能有一个直接父类;一个父类可以有多个子类。 Java语言中,类的继承的声明格式是:
在继承关系中:

1、子类可以得到父类的属性和方法,这是从父类继承来的;
2、子类可以添加新的属性和方法,添加父类所没有的;
3、子类可以重新定义父类的属性和方法,修改父类的属性和方法,为自己所用

创建子类对象时,当调用子类的构造方法时,必须先调用父类的构造方法,如果子类的构造方法中没有调用父类的构造方法,则编译器会默认在子类的构造方法中的第一句加上super()来调用父类的默认无参构造方法,如果父类中没有无参的构造方法,则系统编译出错。
在创建子类对象时,它首先调用父类的构造方法,然后运行实例变量和静态变量的初始化器,最后才运行构造方法本身。默认情况下,会调用父类无参的构造方法。

public class Test_32_继承 {
	public static void main(String[] args) {
		Worker_32 w=new Worker_32();//Worker是继承Employee的子类
		w.name="tom";
		w.birth="1991-10-07";
		w.salary=50000;
		w.getDetail();
		w.getSalary();
		System.out.println("allowance is "+w.dressAllowabce());
	}
}

class Employee_32{
	String name;
	String birth;
	double salary;
	
	Employee_32(int a){
		System.out.println("Employee_32()");
	}
	
	public void getDetail() {
		System.out.println("name="+name+",birth="+birth);
	}
	
	public double getSalary() {
		System.out.println("salary="+salary);
		return salary;
	}
}

class Worker_32 extends Employee_32{//重载Employee类
	
	Worker_32(){
		super(8);//父类没有无参构造器,不写super(8)会默认调用父类无参构造器,会报错
		System.out.println("Worker_32()");
	}
	
	public double dressAllowabce() {
		double allowance=200;
		return allowance;
	}
}

上述代码会先执行父类的构造方法,先输出Employee_32()然后调用子类自己的构造方法,输出Worker_32()
请添加图片描述

子类将从父类中继承下来的方法重新实现,叫做覆盖(Overriding)或重写(rewrite),方法覆盖的原因是父类中对应方法的行为不适合子类的需要,因此在子类中进行相应的调整。 覆盖(Overriding)是对从父类中继承来的方法进行改造,在子类继承父类时发生,在子类中的覆盖方法与父类中被覆盖的方法应具有:

1、相同的方法名
2、相同的参数列表(参数数量、参数类型、参数顺序都要相同) 3、相同的返回值类型
4、子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值