子类与继承

子类与父类

求职者在介绍自己的基本情况时不必“从头说起”,例如,不必介绍自己所具有的人的一般属性等,因为人们已经知道求职者肯定是一个人,已经具有了人的一般属性,求职者只要介绍自己独有的属性就可以了。同样的,当我们装备编写一个类的时候,发现某个类有我们所需的成员变量和方法,如果我们想复用这个类中的成员变量和方法,即在所编写的类中不用声明成员变量就相当于有了这个成员变量,不用定义方法就相当于有了这个方法,那我们可以将编写的类定义为这个类的子类,子类可以让我们不必一切“从头做起”。

子类

在类的声明中,通过使用关键字extends来定义一个类的子类,格式如下

class 子类名extends 父类名{
   
···
}

例如

class Student extends People{
   
···
}

这里把Student类定义为People类的子类,People类是Student类的父类(超类)。

子类的继承性

类可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明,定义的,另一部分是从他的父类继承。那么,什么叫继承呢?所谓子类继承父类的成员变量作为自己的一个成员变量,就好像它们是在子类中直接声明一样,可以被子类中自己定义的任何方法实例操作,也就是说,一个子类继承的成员应当是这个类的完全意义的成员,如果子类中定义的实例方法不能操作父类的某个成员变量,该成员变量就没有子类继承;所谓子类继承父类的方法作为子类的一个方法,就像它们是在子类中直接定义一样,可以被子类中自己定义的任何实例方法调用。
如果子类和父类在同一个包中,那么,子类自然地继承其父类中不是private的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或犯法的访问权限保持不变。
如果子类和父类不在同一个包中,父类中的private和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的protected和public访问权限的方法作为子类的方法。
例子1

public class People{
   
int age,leg=2,hand=2;
protected void showPeopleMess(){
   
System.out.printf("%d岁%d只脚%d只手\t",age,leg,hand);
	}
}
public class Student extends People{
   
int number;
void tellNumber(){
   
		System.out.printf("学号:%d\t",number);
	}
	int add(int x,int y){
   
		return x+y;
	}
}
public class UniverStudent extends Student{
   
	int multi(int x,int y){
   
		return x*y;
	}
}
public class Example{
   
	public static void main(String args[]){
   
		Student zhang = new Student();
		zhang.age = 17;	//访问继承的成员变量
		zhang.number = 100101;
		zhang.showPeopleMess();//调用继承的方法
		zhang.tellNumber();
		int x=9,y=29;
		System.out.print("会做加法:");
		int result = zhang.add(x,y);
		System.out.printf("%d+%d=%d\n",x,y,result);
		UniverStudent geng = new UniverStudent();
		geng.age = 21;	//访问继承的成员变量
		geng.number=6609;	//访问继承的成员变量
		geng.showPeopleMess();	//访问继承的方法
		geng.tellNumber();	//访问继承的方法
		System.out.print("会做加法:");
		result = geng.add(x,y);
		System.out.printf("%d+%d=%d\n",x,y,result);
		System.out.print("会做乘法:");
		result = geng.multi(x,y);
		System.out.printf("%d*%d=%d\n",x,y,result);
	}
}

运行结果
在这里插入图片描述

子类对象的特点

当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将其中的一部分即子类继承的那部分成员变量,作为分配给子类对象的变量。也就是说,父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,即子类不继承父类的私有成员变量。同样,如果子类和父类不在同一包中,尽管父类的友好成员变量分配了内存空间,但也不作为子类对象的变量,即如果子类和父类不在同一包中,子类不继承父类的友好成员变量。

下面例子中子类ChianPeople的对象调用继承的方法操作未被子类继承却分配了内存空间的变量

class People1{
   
	private int averHeight = 166;
	public int 
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值