继承的基本实现

本章目标
掌握继承的基本概念及实现
掌握继承实现的各种限制

 

为什么要有继承?

 

类的继承格式
在Java中使用extends关键字完成类的继承关系,操作格式:
——class 父类{}  // 定义父类
——class 子类 extends 父类{}  // 使用extends关键字实现继承

 

继承的实现

class Person{//定义 Person 类
	private String name;//定义 name 属性
	private int age;//定义 age 属性
	public String getName() {//取得 name 属性
		return name;
	}
	public void setName(String name) {//设置 name 属性
		this.name = name;
	}
	public int getAge() {//取得 age 属性
		return age;
	}
	public void setAge(int age) {//设置 age 属性
		this.age = age;
	}
}
class Student extends Person{//Student 是 Person 的子类
	//此处任何代码都不编写
}
public class ExtDemo02 {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.setName("张三");//此时访问的方法是父类中的,子类中并没有定义
		stu.setAge(30);//此时访问的方法是父类中的,子类中并没有定义
		System.out.println("姓名:"+stu.getName()+"; 年龄:"+stu.getAge());
	}
/* 结果:
 * 姓名:张三; 年龄:30
 * */	
}

 

通过子类扩展父类的功能

class Person{//定义 Person 类
	private String name;//定义 name 属性
	private int age;//定义 age 属性
	public String getName() {//取得 name 属性
		return name;
	}
	public void setName(String name) {//设置 name 属性
		this.name = name;
	}
	public int getAge() {//取得 age 属性
		return age;
	}
	public void setAge(int age) {//设置 age 属性
		this.age = age;
	}
}
class Student extends Person{//Student 是 Person 的子类
	private String school;//新定义的属性 school
	public String getSchool() {//取得 school 属性
		return school;
	}

	public void setSchool(String school) {//设置 school 属性
		this.school = school;
	}
}
public class ExtDemo03 {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.setName("张三");//此时访问的方法是父类中的,子类中并没有定义
		stu.setAge(30);//此时访问的方法是父类中的,子类中并没有定义
		stu.setSchool("My school");//此时的方法是在子类中定义的
		System.out.println("姓名:"+stu.getName()+"; 年龄:"+stu.getAge()+"; 学校:"+stu.getSchool());
	}
/* 结果:
 * 姓名:张三; 年龄:30; 学校:My school
 * */	
}

 

Person与Student的继承关系图

  

 继承的限制
在Java中只允许单继承,不能使用多重继承,即:一个子类只能继承一个父类。但是允许进行多层继承,即:一个子类可以有一个父类,一个父类还可以有一个父类。

 

 继承的类图表示

 

 访问限制
在使用继承的时候也应注意的是:子类是不能直接访问父类中的私有成员的,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。

 

 子类访问限制

public class Person {//定义 Person 类
	private String name;//定义 name 属性
	private int age;// 定义 age 属性
	public String getName() {//取得 name 属性
		return name;
	}
	public void setName(String name) {//设置 name 属性
		this.name = name;
	}
	public int getAge() {//取得 age 属性
		return age;
	}
	public void setAge(int age) {//设置 age 属性
		this.age = age;
	}
}

 

public class Student extends Person {//Student 是 Person 的子类
	public void fun(){
		//System.out.println("父类中的 name 属性:"+name);//错误,无法访问
		//System.out.println("父类中的 age 属性:"+age);//错误,无法访问
		System.out.println("父类中的 name 属性:"+getName());//正确,间接访问
		System.out.println("父类中的 age 属性:"+getAge());//正确,间接访问
	}
}

  

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值