读书人

关于JAVA中类的继承有关问题

发布时间: 2013-03-22 09:49:50 作者: rapoo

关于JAVA中类的继承问题
下面来看一个实例,通过这个实例我们可以初步认识类的继承这个现象:
假设我们要给一个教育部使用的学生管理系统,那么从教育部出发,所有的学生(无论大中小)都可以是一种类型的,即定义为一个简单的Student类:
//所有一般学生的定义
public class Student(){
//学生名字设定及获得方法
private String name;
public void setName(String name){
this.name= name;
}
public String getName(){
reutrn name;
}
//每个学生都有学习的方法
public void study(){
System.out.println("Student类中的学习方法,学生名字是"+name);
}
}

可是,当我们把这个系统给某个大学生使用时,明显有一定的局限性,我们需要再定义一个大学生类,可是,大学生类里面一样会有学习的方法和学分,名字属性,但其学习方法和一般学生是不同的!可是,如果我们为了大学生另外编写一个类的话,又会早成一定的不便,因为实际上大学生也是学生这个类里面的,所以这时候,我们就需要用到类的继承这个概念来实现对大学生这个特殊的学生类的编写
public class UNStudent extends Student(){我们称“UNSudent继承了Student类”,就将UNStudent称为Student的子类,Student叫做UNStudent的父类,UNStudent中就自动具有了Student中定义的属性和方法(如左边下半段代码)

}//子类 extends 父类:继承格式
//程序入口
public stastic void mian(String[] args){
//创建大学生类的对象
UNStudent uns=new UNStudent();
//调用方法:这些方法是从父类中继承来的
uns.setName("我是大学生");
uns.study;
}




从中我们看出了继承的必要性,也就能够回答出我们的问题

1.为什么需要使用继承
? 提高代码的重用性 :如上所示可以看出,类的继承使得Student类中的代码在UNStudent类中得到重复使用,提高代码的重用,也增大其使用价值
提高代码的扩展性:在提高重用性的同时增加了其扩展领域
既然知道了继承的作用,那么:如何继承呢?
2.继承的语法格式
继承 的关键字:Extends
格式:Public class 子类名 extends 父类名{

}

子类中可以使用父类中一些属性和方法(注意:不是全部!)
3.子类继承到父类的那些属性和方法

父类 继承 子类子类继承了父类所有访问修饰符的属性和所有访问修饰符的方法(构造方法)
java中的访问修饰符有:Private,protected,public,默认的

子类和父类在同一包里能调用的属性和方法有:public,protected,默认的属性和方法可以被子类和子类的对象调用
子类和父类不在同一包下是能调用的属性和方法有
1. public的属性和方法能被子类和子类的对象调用
2. protected的属性和方法能在子类的{}里面调用



子类中同样可以使用自己重新定义 的方法,对于重新定义父类中方法的现象,我们称之为方法的重写
4.方法的重写(OverWrite)
重写的条件1. 必须要存在继承关系
2. 返回类型,方法名,参数个数,参数类型,参数顺序必须要和父类完全相同
3. 子类的重写方法是的访问修饰符可以大于或者等于父类的访问
修饰符大小:public>protected>private
关于调用? 子类重写父类的方法,优先使用子类中重写的方法,但前提是实例化的对象是子类的
(这就像你花钱时,如果你自己实现了工作的方法,花的是自己的钱,否则,花的肯定是你从父亲那里继承来的钱)


//继承Student类//再来调用
public class UNStudent extends Student(){//程序入口
//重写继承自父类中的方法public static void main(String[] args){
public void study(){ //创建大学生类的对象
System.out.println("UNStudent要学习,要独立 名 字"+getName()); UNSudent uns=new UNStudent();
} //调用方法:这些方法是从父类那里继承来的
} uns.setName("我是大学生");
uns.study();
}

输出结果:UNStudent要学习,要独立,名字 我是大学生

5.自动转型(指的是子类对象会自动转变为父类类型)
//程序入口
public static void main(String[] args){
//父类类型变量名用来引用子类对象(注意:类的继承中自动转型的标志)
Student uns= new UNStudent();
/调用从父类中继承来的方法
uns.setName("我是大学生");
uns.study();

}
注意,上例中使用了Student类型的变量指向(引用)一个UNStudent对象,这只有当UNStudent是Student子类(或孙子类)时成立,反过来是不成立的
特别注意
? 子类对象自动转型为父类类型时,通过父类类型变量的引用,只能调用自己在父类中定义的方法,不能调用子类中自己定义的方法(缺点);
? 在java中,子类一次只能继承一个父类,即单根继承

自动转型1. 前提,存在继承关系(是子类的对象向父类转型)
2. 格式:父类名 对象名= new 子类的构造方法();
强制转型Student un=new UNStudent();
UNStudent uns =(UNStudent)un;(不行)
? 优点 :提高代码的重用性
? 无法调用子类中定义的方法(不是重写)

6.多态
多态对象的不同表现形态
关于多态的问题,会在接下来的博文里面详细介绍……

读书人网 >编程

热点推荐