每周总结7
写无参是好习惯,不然像子类继承父类,其构造方法默认加上的第一行super()会调用父类的无参,如果没有那就会报错了。
里氏替换原则,子不改父,子类可以扩展,但是不能修改父类。
最好的抽象可以什么都不写,空方法,空类。
(idea的包里面好像只要有错误就运行不了)
多态
是指编译时调用父类的,而运行是调用子类的(if子类没有,退而求其次找父类的)
方法,
先编译,静态绑定,看父类中有无此方法,有才编译通过,
然后动态绑定,去看子类中有无,有则使用子类的,无则使用父类的。
父类没有,子类再有也没有用
public class azhe{
public static void main(String[] args){//像c语言中的main()函数,是函数所以要有返回值
//是int main()开头。这里是main()方法,方法自然要有权限修饰符(不写默认default)还有返回值
//这个main方法必须要static修饰,是说要创建main实例(对象)去调用,但是如果直接static了就不需要创建对象就可以直接运行,转化为可执行字段了(代码段)
//所以 就是 public static void main了,权限public 储存类型static 返回值void.
System.out.println("Hello World!");
Dog d1 = new Dog();//不知道为什么,这里说静态上下文无法调用this,但是我感觉也没有调用啊。
//然后把类都static修饰(还可以这种操作)就可以运行了
}
static class Animal
{
public String Name;//要实现封装可以private,java中是有String关键字的,比c多。
public Animal(){
System.out.println("父类无参执行!");
}//无参
}
static class Dog extends Animal
{
public Dog(){
System.out.println("子类无参执行!");//果然是先执行父类构造方法的。
}
}
}
super()和this()
super()可以调用父类的构造方法(不给参调用无参,给了调用对应有参。)
而
this()可以调用本类构造方法(不给参调用无参,给了调用对应有参。)
但是这两种特殊调用构造方法的方式只能用于代码块的第一行,所以互斥,不可同时用or多用。
super 和 this
关键字
this.member;引用此方法的对象的成员变量(属性)
super.id;调用父类的属性。
可以区分就近原则的同名变量干扰。
也可以调用方法。老样子,二者调用的对象范围不同,this是调用者的,super是调用者(直系最近一代)父类的。
this代表本类对象,super代表父类对象。//类似java中的指针但是用法又区别于c一点