class 子类 extends 父类 { }
Person类
public class Person {
String name;
int age;
}
Student类
public class Student extends Person {
String school;
}
测试类
public class Test {
public static void main(String[] args) {
Student s = new Student();
// 访问 Person 类中的 name 属性
s.name = "张三";
// 访问 Person 类中的 age 属性
s.age = 25;
// 访问 Student 类中的 school 属性
s.school = "北京";
System.out.println("姓名:" + s.name + ",年龄:" + s.age + ",学校:" + s.school);
}
}
输出:
1.先执行父类的属性初始化, 再执行父类构造方法
2.执行子类属性初始化, 执行子类的构造方法
如果父,子都有静态资源(静态属性, 静态代码块):
1.先执行父类静态资源,再执行子类静态资源,
2.先执行父类的属性初始化, 再执行父类构造方法
3.执行子类属性初始化, 执行子类的构造方法
静态属性赋值, 静态代码块只执行一次
Person类
public class Person {
String name;
int age;
//父类的构造方法
public Person(){
System.out.println("父类的构造方法");
}
}
Student类
public class Student extends Person {
String school;
//子类的构造方法
public Student(){
System.out.println("子类Student的构造方法");
}
}
测试类
public class Test {
public static void main(String[] args) {
Student s = new Student();
}
}
输出
在子类调用父类方法或属性时使用
super.属性名
super.方法名()
注意:super调用父类的构造方法时,只能防止程序的第一行(要不然会报错)
super是调用父类的属性和方法
this是调用本类的属性和方法
如果子类对父类方法的实现不满意, 子类可以重写父类的方法
子类重写父类,方法签名与父类方法签名一样: 返回值一样, 方法名一样. 参数列表一样
子类重写父类的方法, 子类对象调用该方法,调用子类重写的方法,
如果子类没有重写父类的方法, 子类对象调用该方法, 调用从父类继承的方法
Monkey类
public class Monkey {
public Monkey(String s){
System.out.println(s);
}
public Monkey(){
}
public void speak(){
System.out.println("咿咿呀呀.......");
}
}
People类
public class People extends Monkey {
public People(String s){
super(s);
}
public People(){
}
@Override
public void speak() {
System.out.println("小样的,不错嘛!会说话了!");
}
public void think(){
System.out.println("别说话!认真思考!");
}
}
测试类
public class Test {
public static void main(String[] args) {
Monkey monkey = new Monkey("我是一只猴子");
monkey.speak();
People people = new People("我是人类Tom");
people.speak();
people.think();
}
}
输出
继承在面向对象编程是十分重要的的,需要牢牢的掌握继承的语法和特点,最最最重要的是继承只能单继承,不能和c++那样多继承.