java继承

为什么要用继承

代码复用

_当我们在创建多个类似的类时,经常会用到相同的属性或者方法,比如我们创建了一个医生类,医生的常用属性有哪些:姓名、性别、年龄、科室等等,然后我们再创建一个教师类,教师的属性有:姓名,性别,年龄,科目等等。那么问题来了,这样写的话我们发现医生和教师都有姓名、性别、年龄,写一个两个类还好,如果有其他职业,要写十个类,二十个类,不停的重复定义姓名、性别、年龄,那就太麻烦了,所以我们把姓名、性别、年龄这些每个职业都有的属性拿出来放到一起写一个类,让医生教师类去共同使用,特殊的属性比如科室,科目分别在医生教师类中定义,这样就方便了很多。医生教师调用职业这个类就叫做extends(继承,或者说是扩展),职业这个公共类我们就叫他superclass(超类,或者父类);医生教师就叫做subclass(子类)。这样子类就可以复用父类的代码,从而让代码更简洁紧凑。

_

 class SuperPerson {
 	String name;
 	int age;
 	}
 class Doctor extends SuperPerson{
 	//这里没有定义姓名年龄属性
 	String keshi="神经科";
 }
 class Teacher extends SuperPerson{
 	 //这里没有定义姓名年龄属性
 	 String kemu="语文";
 }
 public static void main(String[] args) {
  	Doctor doctor=new Doctor();
  	doctor.name="张医生";
  	doctor.age=28;
  	Teacher teacher=new Teacher();
  	teacher.name="李老师";
  	teacher.age=25;
  System.out.println(doctor.keshi+doctor.age+"的"+doctor.name+"在给"+teacher.age+"教"+teacher.kemu+"的"+teacher.name+"看病");

 	}

在这里插入图片描述

方法也同样被继承过来了

class SuperPerson {
  private String name;
  private int age;	 
  public String getName() {
  	return name;
         }
 public void setName(String name) {
  	this.name = name;
 	}
 public int getAge() {
  	return age;
 	}
 public void setAge(int age) {
  	this.age = age;
 	}	
  }
 
public static void main(String[] args) {
	  Doctor doctor=new Doctor();
	  doctor.setName("张医生");
	  doctor.setAge(28);
	  Teacher teacher=new Teacher();
	  teacher.setName("李老师");
	  teacher.setAge(25);
 System.out.println(doctor.keshi+doctor.getAge()+"的"+doctor.getName()+"在	给"+teacher.getAge()+"教"+teacher.kemu+"的"+teacher.getName()+"看病");
 }







注意,如果父类的属性和方法被private访问权限修辞符修辞了,那么私有属性和方法可以被子类继承,但无法访问

子类不会继承父类构造方法,但可以通过super关键字显示或隐式调用构造方法,当调用父类的无参构造方法时,隐式调用,并且会优先调用父类的构造方法:

class SuperPerson{
	String name;
  	int age; 
 	public SuperPerson() {
 	System.out.println("老父亲的构造方法");
 	}
}
class Doctor extends SuperPerson{
	public Doctor() {
 	 	System.out.println("儿子的构造方法 ");
	}
 
}
public static void main(String[] args) {
  Doctor doctor=new Doctor();
 }

在这里插入图片描述

如果父类中有带参数的构造方法,那么子类继承的时候,需要在子类中显示调用:

class SuperPerson {
	public SuperPerson(String name) {
	  System.out.println("老父亲"+name+"的有参构造方法");
	 }
}

class Teacher extends SuperPerson{
	public Teacher(String name){
		super(name);
	}
}


public static void main(String[] args) {
 	 Doctor doctor=new Doctor("jack");
 }

在这里插入图片描述

子类中的调用有参构造方法的super语句要优先放在构造方法体的第一行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值