java 继承 方法重写 自动转型 多态 接口 抽象类

.继承
类之间的继承是面向对象程序设计语言的基本特征之一,子类继承了父类的某些属性和方法,以此为基础再定
义本身特有的属性和方法,避免了代码的重复开发,提高了编程效率。在下面的例子当中,一个Studengt类作为父类,而MidStudengt类作为其子类,将从其父类Student里继承有关的属性和方法。
/** 构造一个Student父类 */
public class Student(){
String name;
String school="蓝杰";

public void setName(String name){
this.name=name;
}
public void getName(){
System.out.println(this.name);
}
public void getSchool(){
System.out.println(this.school);

public void study(){
System.out.println("学生方法");
}
}
/** 构造一个MidStudent子类 */
public class MidStudent extends Student(){
int stuNumber=24;
pubic void getNumber(){
System.out.println(stuNumber);
}
}
/** 构造一个测试类*/
public class Test(){
public static void main(String[] args){
MidStudent stu1=new MidStudent;
stu1.setName("张明");
stu1.getName();
stu1.getSchool();
stu1.study();
stu1.getNumber();
}
}

输出结果

张明
蓝杰
学生方法
24

继承关键字为extends,上例中MidStudent类继承了父类Studeng类的setName() getName() getSchool()以及study()方法,并在此基础上只定义了自己的方法getNumber(),增加了代码的可用性。在继承机制中,子类可以得到父类中除去private属性和构造方法以外的属性和方法,新方法的访问权限不能比父类方法小,且在java中一个子类只允许继承一个父类。

2.方法重写
方法重写是子类在继承父类的继承上,重新构造从父类继承过来的方法。与方法重载相同的是,新方法的方法名不能改变,而与方法重载的区别,再于在方法重写中新方法的返回类型和参数也同样不能改变。
/** 构造一个Student父类 */
public class Student(){
String name;
String school="蓝杰";

public void setName(String name){
this.name=name;
}

public void study(){
System.out.println("学生方法");
}
}
/** 构造一个MidStudent子类 */
public class MidStudent extends Student(){

public void setName(String name){ //重写此方法
this.name=name;
System.out.println(this.name);
}
public void study(){ //重写此方法
System.out.println("中学生方法");
}
}
/** 构造一个测试类*/
public class Test(){
public static void main(String[] args){
MidStudent stu1=new MidStudent;
stu1.setName("张明");
stu1.study();
}
}
输出

张明
中学生方法

上例中重写方法的名字 返回类型和参数都不能改变,并改变了方法体,实现了不同功能。

3.自动转型
自动转型前提是两个类存在继承关系,其书写格式为 父类名 变量=new 子类名();
自动转型在对象之间的引用传值方面有很大的作用,子类由此自动转型为父类。如果子类重写了父类的方法,那么转型之后的父类对象调用的是重写后的新方法,如在上例中测试类中若有"Student stu1=new MidStudent();"这样的语句,则诸如stu1.study()的输出是“中学生方法”,即调用子类的重写方法,当然如果子类没有重写父类方法,则转型后的父类对象会调用父类原来的方法,且此时不能调用子类的特有方法。

4.多态
多态同样是面向对象语言的基本特征之一,极大丰富了编程的实现手段。通常一个类的方法会被其不同子类重写,以期实现不同的内容,这就是多态的具体表现之一。比如我们在方法重写处给出的例子中再添加一个UnStudent类,同样是继承了Studengt 类,代码如下:
public class UnStudent extends Student{
public void study(){ //重写方法
System.out.println("大学生方法");
}
}
在测试类中,分别创建UnStudent和MidStudent的对象,代码如下:
public class Test(){
public static void main(String[] args){
MidStudent stu1=new MidStudent();
UnStudent stu2=nwe UnStuent();
//两个对象分别调用相同方法名的方法,以其输出结果体现多态的特征
stu1.study();
stu2.study();
}
}
输出

中学生方法
大学生方法

从例子中可以看成不同类型的对象调用了相同的方法名的方法,但输出结果不同,即实现了多态。

5.抽象类
方法一般分为普通方法 构造方法和抽象方法,在声明中只声明了方法名而没有给出具体的方法实现的称为抽象方法,含有一种或多种抽象方法的类称之为抽象类,其关键字为abstract,例如
abstract class Student{
String name;
int age;
public void study(){
}
}
抽象类的意义在于在为一类对象设计抽象的模型,使得设计更加清晰,因此没必要给出具体的方法实现,并且禁止创建实例对象。抽象类处于设计的顶层,假如其子类实现了其抽象方法并能够创建实例对象,则可说抽象类被其子类实现,如其子类同样不能创建实例对象,则仍可视之为抽象方法。如果一个不包含抽象方法的普通类名前加上abstract,同样可以视之为抽象类,此时同样不能创建实例对象。

6.接口
接口是抽象类的进一步发展,其关键字为interface,被定义的常量不能修改,且必须初始化,即这些常量具有public,final,static 属性,并且所含的方法必须是抽象方法,其访问权限同样必须是公有。与抽象类一样,接口不允许创建实例,但可以被实现,实现关键字为implements,其实现类必须实现接口的所有抽象方法。另外接口可以通过继承来拓展接口,也可以被多重实现。以下代码简单演示了一个接口Flayer被类Bird继承。
//接口例子
public interface Flayer{
public void land();
public void fly();
public void takeoff();
}
//接口被实现
public class Bird implements Flayer{
public void land(){
System.out.println("鸟的落地方法");
}
public void fly(){
System.out.println("鸟的飞行方法");
public void takeoff(){
System.out.println("鸟的起飞方法");
}


7.结语
继承是方法重写和自动转型的基础,而方法重写和自动转型亦是多态的基础。而接口的多重实现也反映了多态这一重要特征。对于抽象类和接口,后者是前者的深入,两者都能扩展,而接口的所有方法必须为抽象方法,抽象类可以有定义方法体的方法。使用接口的优势,在于类可以通过接口实现多重继承以及抽象出不相关类的相同性,方便代码的书写。  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值