//父类Animal
public class Animal {
/* private :只允许在本类中进行访问
* public: 允许在任意位置访问
* protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
* 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
*/
private String name; //昵称(实例变量)
protected int month; //月份(实例变量)
String species; //品种 //实例变量(默认级别)
public int temp=15; //成员变量
private static int st1=22; //静态变量
public static int st2=23; //静态变量
static {
System.out.println("我是父类的静态代码块");
}
{
System.out.println("我是父类的构造代码块");
}
//无参构造方法
//父类的构造不允许被继承、不允许被重写,但是会影响子类对象的实例化过程
public Animal(){
month=2;
System.out.println("我是父类的无参构造方法");
}
//带参构造方法
public Animal(String name,int month) {
System.out.println("我是父类的带参构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
//吃东西
public void eat() {
System.out.println(this.getName()+"在吃东西");
}
public void eat(String name) {
System.out.println(name+"在吃东西");
}
public Animal jump() {
System.out.println("运动跳跃是一种本能");
return new Animal();
}
}
//子类Cat
public class Cat extends Animal{
private double weight; //体重
public static int st3=44;
static {
System.out.println("我是子类的静态代码块");
}
{
System.out.println("我是子类的构造代码块");
}
//无参构造方法
public Cat() {
System.out.println("我是子类的无参构造方法");
}
//带参构造方法
public Cat(String name,int month) {
/* 子类构造默认调用父类无参构造方法
* 可以通过 super() 调用父类允许被访问的其他构造方法
* super() 必须放在子类构造方法有效代码 第一行
*/
System.out.println("我是子类的带参构造方法");
}
public void setWeight(double weight) {
this.weight=weight;
}
public double getWeight() {
return weight;
}
//跑动的方法
public void run() {
System.out.println(this.getName()+"是一只"+this.getSpecies()+",它在快乐地奔跑");
}
}
//测试
public class TestTwo {
public static void main(String[] args) {
Cat one=new Cat("花花",2);
System.out.println(one.temp);
}
}
测试结果:
我是父类的静态代码块
我是子类的静态代码块
我是父类的构造代码块
我是父类的无参构造方法
我是子类的构造代码块
我是子类的带参构造方法
15
也就是说,子类构造默认调用父类无参构造方法,若希望调用父类带参构造方法时,需要用到super关键字,并将它放在子类带参构造方法有效代码的第一行。
//父类Animal
public class Animal {
/* private :只允许在本类中进行访问
* public: 允许在任意位置访问
* protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
* 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
*/
private String name; //昵称(实例变量)
protected int month; //月份(实例变量)
String species; //品种 //实例变量(默认级别)
public int temp=15; //成员变量
private static int st1=22; //静态变量
public static int st2=23; //静态变量
static {
System.out.println("我是父类的静态代码块");
}
{
System.out.println("我是父类的构造代码块");
}
//无参构造方法
//父类的构造不允许被继承、不允许被重写,但是会影响子类对象的实例化过程
public Animal(){
month=2;
System.out.println("我是父类的无参构造方法");
}
//带参构造方法
public Animal(String name,int month) {
System.out.println("我是父类的带参构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
//吃东西
public void eat() {
System.out.println(this.getName()+"在吃东西");
}
public void eat(String name) {
System.out.println(name+"在吃东西");
}
public Animal jump() {
System.out.println("运动跳跃是一种本能");
return new Animal();
}
}
//子类Cat
public class Cat extends Animal{
private double weight; //体重
public static int st3=44;
static {
System.out.println("我是子类的静态代码块");
}
{
System.out.println("我是子类的构造代码块");
}
//无参构造方法
public Cat() {
System.out.println("我是子类的无参构造方法");
}
//带参构造方法
public Cat(String name,int month) {
/* 子类构造默认调用父类无参构造方法
* 可以通过 super() 调用父类允许被访问的其他构造方法
* super() 必须放在子类构造方法有效代码 第一行
*/
super(name,month);
System.out.println("我是子类的带参构造方法");
}
public void setWeight(double weight) {
this.weight=weight;
}
public double getWeight() {
return weight;
}
//跑动的方法
public void run() {
System.out.println(this.getName()+"是一只"+this.getSpecies()+",它在快乐地奔跑");
}
}
//测试
public class TestTwo {
public static void main(String[] args) {
Cat one=new Cat("花花",2);
System.out.println(one.temp);
}
}
测试结果:
我是父类的静态代码块
我是子类的静态代码块
我是父类的构造代码块
我是父类的带参构造方法
我是子类的构造代码块
我是子类的带参构造方法
15