public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate() {
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
this.year指的是成员变量中的year;这样程序就知道了是给成员变量赋值的
? ? ? ?当子类和父类中出现了相同名字的成员变量时,优先是访问子类的,如果就是要访问父类的那么可以用super.data来访问父类中的普通成员变量
class Animal {
public String name;
public int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name + "吃饭!");
}
}
class Dog extends Animal{
//傻狗 是狗的属性
public boolean silly;
//public String name = "hello";
public Dog(String name,int age,boolean silly) {
//1. 先帮助父类部分初始化 必须放到第一行
super(name,age);
//super(); 不写构造方法 默认就是这个不带任何参数的,会调用父类的构造方法
this.silly = silly;
}
public void houseGuard () {
System.out.println(super.name+"正在看家护院!");
//实例内部当中 才会包含外部类的this
//System.out.println(Animal.this.name+"正在看家护院!");
//eat();
}
@Override
public void eat() {
System.out.println(name+"正在吃狗粮!");
}
}
? ? ? ? 注意上述代码:Animal被Dog继承了,那么当我实例化Dog这个对象的时候,从父类(Animal)继承过来的数据如何进行初始化呢?
1.对象的初始化一定得调用构造方法,如果自己不写你们编译器会自己调用一个不带任何参数的构造方法
2.在子类构造完成之前得先帮父类完成初始化
3.在子类构造方法中,并没有写任何关于基类构造的代码,但是在构造子类对象时,先执行基类的构造方法,然后执行子类的构造方法,这是因为:子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分 ??。父子父子肯定是先有父再有子,所以在构造子类对象时候 ,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整 。