1.父类
package com.xinzhi;
public class Father {
// 所有的类都会有一个顶级的父类,object
// private仅支持本类
// protected可在父子类之间调用
// 父类的静态变量
public static String NAME = "老王";
/**
* 类加载的时候就会调用
* 类加载的时机 第一次主动使用就会加载这个类,把他加载到内存
*/
static {
System.out.println("父类的静态属性:" + NAME);
System.out.println("父类的静态代码块");
}
// 非静态的属性
private String hobby = "看电视";
// 非静态代码块
{
System.out.println("父类的非静态属性:" + hobby);
System.out.println("父类的非静态代码块");
}
public Father(String hobby) {
this.hobby = hobby;
System.out.println("父类的构造方法");
}
public void smoke(){
System.out.println("我爱抽中华!");
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
2.子类
package com.xinzhi;
public class Son extends Father {
// 子类的静态变量
public static String NAME = "不知道爸爸是谁的孩子";
/**
* 类加载的时候就会调用
* 类加载的时机 第一次主动使用就会加载这个类,把他加载到内存
*/
static {
System.out.println("子类的静态属性:" + NAME);
System.out.println("子类的静态代码块");
}
// 非静态的属性
private String hobby = "子类看电视";
// 非静态代码块
{
System.out.println("子类的非静态属性:" + hobby);
System.out.println("子类的非静态代码块");
}
/**
* 构造子必须先构造一个父类,而且必须首先构造父类,必须是第一行
*/
public Son(){
super("烫头");
System.out.println("子类的构造器");
}
public void swim(){
// 想让父亲也抽烟,父类也叫超类
super.smoke();
// 游泳前先抽根烟
System.out.println("我的爱好是:" + getHobby());
}
/**
* @Override 注解,当子类重写父类的方法时,要加这个
*/
@Override
public void smoke(){
System.out.println("我爱抽红塔山");
}
}
3.Test
package com.xinzhi;
public class Test {
public static void main(String[] args) {
// 子类重写调子类,子类不重写调父类
Son son = new Son();
}
}
4.运行结果
先是父类属性,再是子类属性,再是构造父类,最后构造子类
父类的静态属性:老王
父类的静态代码块
子类的静态属性:不知道爸爸是谁的孩子
子类的静态代码块
父类的非静态属性:看电视
父类的非静态代码块
父类的构造方法
子类的非静态属性:子类看电视
子类的非静态代码块
子类的构造器