继承关键字:extends
概念:扩展父类的功能,使用extends关键字完成
代码:class 子类 extends 父类 {}
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void tell() {
System.out.println(getName()+getAge());
}
}
class Student extends Person{//扩展,得到name和age属性
private int score;//学生自有属性
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void say() {
System.out.println(getScore());
}
}
public class Test01 {
public static void main(String[] args) {
Student s=new Student();
s.setAge(20);
s.setName("张三");
s.setScore(100);
s.tell();
s.say();
}
}
继承的限制:只允许单继承;子类不能直接访问父类的私有成员
子类对象在实例化之前,必须调用父类中的构造方法,之后调用子类构造方法
class Father{
private String name;
private int age;
public Father() {
System.out.println("123");
}
}
class Son extends Father{
public Son() {
System.out.println("321");
}
}
public class Test03 {
public static void main(String[] args) {
Son s=new Son();
}
}
输出结果:
123
321
主方法种并未调用方法结果却显示,说明在实例前已调用父类、子类的构造方法
在继承中,存在重写的概念,其实就是子类定义了和父类同名的方法
定义:方法名称、返回值类型、参数都相同
限制:被子类重写方法不能比父类拥有更严格的访问限制(private<不写<public)
super:强行调用父类方法
class A{
public void tell() {
System.out.println("写方法");
}
}
class B extends A{
public void tell() {
super.tell();//通过super关键字调用父类方法
System.out.println("重写方法");
}
}
public class Test04 {
public static void main(String[] args) {
B b=new B();
b.tell();
}
}
输出结果:
写方法
重写方法
重写与重载区别
重载存在于一个类中,重写存在于继承关系中
重载:名称相同,其他不同;重写都相同
权限限制不同