继承与接口总结

类的继承

当我们编写完了类的时候,我们需要编写该类分支中更加细致的类。分支中的类所需的部分属性是原本的类已经拥有的,这个时候我们就不需要去重新定义这些原本的类已经拥有的属性,可以选择让分支中的类去继承之前的主类。我们称主类为父类,而分支的类为子类,子类继承父类可以减少代码的冗余,也可以体现现实生活中类与类的关系,使代码的可读性更强。

一.类的继承

public class 子类 extends 父类{
}

当子类继承父类后,就可以继承父类中所有的属性和方法,并且可以直接调用。(这儿我以大学生类继承学生类为例)

当子类继承完父类后,还可以继续编写子类特有的属性和方法。
比如:

	public void cet4(){
		System.out.println("大学生需要考四级");
}

而对于子类特有的方法,要注意一定是子类类型的对象才能调用,例如大学生类定义的cet4方法一定是大学生类型的对象才能调用

二.自动转型和强制转型


自动转型是指将一个子类的对象的类型定义为父类类型的写法。很多时候,子类对象都自动转型为了父类对象。
例如add()这个方法,括号里面的对象的类型有很多,但这个方法是通用的,因为这些对象都是add()对象的类的子类,因此在使用
这个方法的时候,子类已经自动转型为父类的
如果是人为的转型
则应该:
父类 对象名 = new 子类();
例如

Student stu = new UNStudent();

子类类型转成父类类型后就不能调用子类特有的方法了。

强制转型则是将父类类型的对象强制转为子类类型。
之前说到如果子类对象自动转型为父类类型是不能再调用子类特有的方法的。这个时候我们就可以将自动转型后的对象再强制转型为子类,这个时候就可以再次调用子类特有的方法了。
强制转型的格式:

UNStudent stu2 = (UNStudent)stu;

因此,如果一个对象可以被强制转型,那该对象一定是之前被自动转型的子类对象。

三.方法的重写

有的时候父类中的方法不适合子类了,这个时候我们就对父类的方法进行重写,重新定义这个方法使之更加适合子类对象。
方法重写(相当于覆盖父类的方法)例如:

public class UNStudent extends Student{
//重写继承于父类的方法
public void study(){
	System.out.println(name+"是大学生,学习不再为了考试");
}

注:
①重写方法一定是在有继承关系的两个类之间进行的
②返回值类型,方法名,参数类型(个数,顺序)完全一样【如果稍微有一点不一样,就会判定为子类的特有方法】
③如果子类和父类在同一个包里面,则public、protected和缺省访问限定符号定义的方法都是可用的
④而如果子类和父类不在同一个包里面,则只有public protected 访问限定符定义的方法是可用的。缺省定义的方法则会报错。
⑤需要是子类对象使用重写的方法才会调用重写的方法,否则就是调用父类原来的方法。

四.接口

1.接口的定义

当父类非常抽象的时候,我们只知道这个类的对象应该干什么,但是如何去完成这些任务我们却不知道,只有到了每个子类我们才知道如何去做,这个时候我们就可以去定义这样一个类:类中只有方法的定义,没有方法体,这个类我们就叫做接口(接口相当于是一个声明,表示该方法是完成哪方面工作的,但是具体的工作没有定义。)

注:
①因为接口的方法都是抽象方法,所以接口是没有构造方法的,不能够创造对象。
②接口的主要作用是来给子类扩展的。
③接口同样是一种数据类型。

2.接口的格式

public interface Person{
//接口的定义不是用class,而是用interface
	public static final int num=1000;
//接口中的属性默认是public static final,只能是public static final
//static指的是静态常量,final指的是不可修改
	void eat();
	public abstract void rest();
//接口中的方法默认是public abstract,只能是public abstract
//抽象方法不能用大括号{}
}

3.接口的实现(继承)

//Student类,实现Person接口
public class Student implements Person{
//子类 extends 父类 implements 接口,接口,接口,……{}
//实现接口中的方法,必须要加上public,接口的实现使用的是implements而不是extends
//可以实现(继承)多个接口
//接口抽象方法的实现(重写):
public void eat(){
	System.out.println("学生在食堂吃饭");
}

注:
①在继承抽象类的时候,对于父类中没有重写的方法体,子类必须重写。因此必须重写(实现)接口中的所有方法。
②实现接口中的方法时,需要去掉"abstract"
③接口的方法都默认是public的。因此即使接口中没有写上public,在实现的时候也必须得加上public。
④接口也可称作父类,子类继承父类(实现接口)的时候,子类对象自动转型为接口类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值