继承的实现
extends->“扩展”,子类是父类的扩展。实现了代码的重用
package text;
public class text01 {
public static void main(String[] args) {
Student stu = new Student();
stu.name="盛大";
stu.height = 180;
stu.rest();
Student stu2 = new Student("符数",1,"计算机大佬");
}
}
class Person /*extends Object*/ {
String name;
int height;
public void rest(){
System.out.println("工作!");
}
}
//学生继承了人
class Student extends Person {
String major;
public void study(){
System.out.println("学习!");
}
public Student(String name,int height, String major){
this.name = name;
this.height = height;
this.major = major;
}
public Student(){
}
}
继承的要点:
- 父类——即为超类、基类、派生类
- java中是单继承
- java中类没有多继承,接口有多继承
- 子类继承父类,可以得到父类的全部属性和方法,当然除去父类的构造方法,单不能直接访问父类的私有属性和方法
- 如果定义一个类,没有调用extends,则他的父类是java.lang.Object
例如:class first{ } 相当于 class first extends Object{ }
instanceof运算符
instanceof是二元运算符,左边是对象,右边是类
当对象是右面类/子类所创建的对象时,返回true,否则返回false
System.out.println(stu2 instanceof Student);//true_是类所创建的对象
System.out.println(stu2 instanceof Person );//true_是子类所创建的对象
System.out.println(stu2 instanceof Object ); //true_是子类所创建的对象
System.out.println(new Person() instanceof Student );
//false
重写override
子类通过重写父类的方法,可以用自身的行为替换父类的行为
重写的要点:
-
==:方法名,形参列表相同
-
≤:返回值类型和声明异常类型——子类小于父类
例如:父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常 -
≥:访问权限——子类大于父类
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)而访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。父类的成员方法只能被它的子类重写,声明为final的方法不能被重写,声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
如果不能继承一个方法,则不能重写这个方法。构造方法不能被重写。
package text;
public class text01 {
public static void main(String[] args) {
Horse h=new Horse();
h.run();
}
}
class Vehicle {
public void run(){
System.out.println("跑");
}
public void stop(){
System.out.println("停止!");
}
public Person whoIsPsg(){
return new Person();
}
}
class Horse extends Vehicle {
public void run(){
System.out.println("重写");
}
//重写方法——返回值类型小于等于父类的类型
public Student whoIsPsg(){
return new Student();
}
}