/*
面向对象下
继承
extends,类的继承
1.通过继承可以简化类的定义
2.Java只支持单继承,不允许多重继承
3.可以有多层继承,即一个类可以继承某一个类的子类,如类B继承类A,类C又可以继承类B,那类C也间接继承了类A
4.子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法.在子类的构造方法中可使用语句super(参数列表)调用父类的构造方法
5.如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法.
*/
/*
子类对象实例化过程
*/
/*
final关键字 表明该类是顶级类, 不可继承
*/
class Person
{
public static final String x="abc";//要么在定义的时候赋值 ,要么在"每一个"构造函数中赋值
public String name="unknown";//private就不能在子类中访问
public int age=-1;
public Person()
{
//x="abc";
//父类中不会自动产生这样一个构造函数,必须自己定义一个构造函数
}
public Person(String name,int age)
{
//x="abc";
this.name=name;
this.age=age;
}
void getInfo()
{
//x="abc";// 无法为最终变量 x 指定值
System.out.println("name="+name+",age="+age);
}
}
class Student extends Person
{
public String school="unknown";
public Student()
{
super();//调用父类中无参数的构造函数
//子类中系统会自动产生的一个构造函数
//super("zhangsan",15);
}
public Student(String name,int age)
{
super(name,age);
}
public Student(String name,int age,String school)
{
this(name,age);
this.school=school;
//super.getInfo();
}
public void study()
{
}
public void getInfo()
{
System.out.println("school="+school+".");//",name="+name+",age="+age);
super.getInfo();
}
}
class TestStudent
{
public static void main(String[] args)
{
Student st=new Student("zhangsan",20,"清华大学");
/*st.name="zhangsan";
st.age=20;*/
st.getInfo();//调用的是子类中的构造函数,而不是父类中的
System.out.println(Float.MAX_VALUE);
}
}