package com.tingle.j2se.basic;
/**
* Created on 2020/4/21 12:12
*
* 本章主要介绍继承、重写、final
* @author Tingle
*/
public class Example4 {
public static void main(String[] args) {
LiberalArtStudent liberalArtStudent = new LiberalArtStudent("李筱禄", 1, 3, "文科");
liberalArtStudent.getSchool();
liberalArtStudent.introduction();
liberalArtStudent.skill();
liberalArtStudent.exam();
}
}
class Student {
public String name;
public int id;
public int classNum;
public String subjectType;
//有参构造方法
public Student(String myName, int myId, int myClassNum, String mySubjectType) {
name = myName;
id = myId;
classNum = myClassNum;
subjectType = mySubjectType;
}
//自定义公共方法1
public void introduction() {
System.out.println("大家好!我是来自" + subjectType + classNum + "班" + id + "号" + name + ".");
}
/**
* 自定义公共方法2
* 把方法锁定,以防任何继承类修改它
*/
public final void getName(){
System.out.print("我的名字是:" + this.name);
}
/**
* 自定义方法3
* 该方法为私有,子类不能继承,虽然为final,但是子类可以定义同名的方法
*/
private final void getSchool(){
System.out.println("红领巾中学");
}
}
/**
* 文科生类,继承父类学生(文科生属于学生一类)
* 理解:只能单继承,即只能有一个父类,只能进行一次extends(只能有一个亲爹~~~o(*≧▽≦)ツ)
* 概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
* 理解:继承父类的成员方法和成员变量,就像亲爹有天生金黄色的头发,儿子一生下来也有金黄色的头发
*/
class LiberalStudent extends Student{
//子类构造方法中,第一行默认是super(),继承父类的成员使用,使用前这些成员必须初始化,他们是父类的成员,所以,必须通过父类进行初始化,在前面说过,构造方法会在类实例化时就进行初始化
public LiberalStudent(String myName, int myId, int myClassNum, String mySubjectType) {
super(myName, myId, myClassNum, mySubjectType);
}
public void exam(){
System.out.println("我们高考要考文综");
}
public void skill(){
System.out.println("我书法很厉害");
}
public void getSchool(){
System.out.println("我来自红领巾中学");
}
}
/**
* 理科生类,继承父类学生(理科生属于学生一类)
*/
class ScienceStudents extends Student{
public ScienceStudents(String myName, int myId, int myClassNum, String mySubjectType) {
super(myName, myId, myClassNum, mySubjectType);
}
public void getSchool(){
System.out.println("我来自美丽的红领巾中学");
}
/**
* 重写父类的方法
*/
@Override
public void introduction(){
System.out.println("Hello!我是来自" + this.subjectType + this.classNum + "班" + this.id + "号" + this.name + ".");
}
void test1(){
this.getSchool();//调用子类方法
super.getName();//调用父类方法
}
}
/**
* 文科艺术生,继承父类文科生(文科艺术生属于学生一类)
* 能多重继承,本例就是介绍多重继承,文科艺术生继承了文科生,文科生继承了学生
* 理解:小明爷爷是学生类,小明爸爸是文科生,小明是文科艺术生,小明爸爸继承小明爷爷的黄头发特征,小明也继承了小明爸爸的黄头发特征,其实源头特征在小明爷爷那,这种理解为多重继承
* 子类拥有父类非 private 的属性、方法
*/
class LiberalArtStudent extends LiberalStudent{
public LiberalArtStudent(String myName, int myId, int myClassNum, String mySubjectType) {
super(myName, myId, myClassNum, mySubjectType);
}
public void skill(){
System.out.println("琴棋书画,无所不通");
}
}