继承
**首先面向对象的三大特性:
1. 封装
2. 继承
3. 多态**
语法
class Subclass extends Superclass{ }
作用
- 继承的出现提高了代码的复用性。
- 继承的出现让类与类之间产生了关系,提供了多态的前提。
- 不要仅为了获取其他类中某个功能而去继承
例子
class Person {
String name;
int age;
}
/*继承与Person类*/
class Student extends Person {
int weight;
}
- Student类继承了Person类,他拥有了Person类的所有成员变量
- Student类拥有自己的一个成员变量
- 如果Person类里里面的变量是private的,子类就不能直接访问了,只能通过get和set函数
- Java中只有单继承,也就是一个子类只能继承一个父类
子类和父类构造器的调用
- 子类中所有的构造器默认都会访问父类中空参数的构造器
- 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
- 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
class Person {
String name;
int age;
Person() {
System.out.println("Person的构造器!");
}
}
class Student extends Person {
Student() {
System.out.println("Student的构造器!");
}
int weight;
}
结果:
Person的构造器!
Student的构造器!
方法重写
要求
- 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。
- 重写方法不能使用比被重写方法更严格的访问权限。
- 重写和被重写的方法须同时为static的,或同时为非static的
- 子类方法抛出的异常不能大于父类被重写方法的异常
class Person {
String name;
int age;
public void say() {
System.out.println("I am person!");
}
}
class Student extends Person {
int weight;
public void say() {
System.out.println("I am student!");//方法重写
}
}
下面这个情况不是方法重写
class Person {
String name;
int age;
public void say() {
System.out.println("I am person!");
}
}
class Student extends Person {
int weight;
private void say() {
System.out.println("I am student!");//不是方法重写
}
}
访问权限
时间: 2024-11-03 21:04:03