例如father a=new child ();
对于father类里面特有的方法,可以通过a对象直接调用,而father类里面有,并且在child类里面经过重写的方法,那么经过a调用时,就会直接调用子类的该方法,而对于子类里面特有的方法,也就是父类里面没有的,那么可以把对象a进行类型转换后,在调用该特有方法。也就是说,对象a只可以直接执行father类里面有的,执行的结果要看子类是否重写了,如果重写过了,就直接执行子类的,如果没有重写,那就直接执行父类的。
this方法是指向当前对象自身的一个引用,而static方法属于类,是不属于任何的一个对象的方法,所以在static方法中不可以使用this关键字进行指代。比如main方法。
对构造方法的理解
1.构造方法不可以有返回值
2.例如teacher a =new teacher();
构造方法就是后面的teacher(),不过用户在测试类中(main方法中)不能够直接调用构造方法,必须和new关键字配套使用。由new关键字来分配构造方法创建对象所需空间。在非静态方法中可以通过this,和super关键字调用构造方法。
3.构造方法的重载:可以使类的对象具有不同的初始值,使对象初始化方便。
就比如上图无论使用怎样 的构造方法都会使得成员变量有合适的初始值。
static关键字
1.static关键字修饰的静态变量
在类加载时就分配了空间并且初始化,不是向成员变量一样等对象创建好了再初始化,只依附于类,故可以通过类名直接调用(前提是不是private),有点类似其他语言中的全局变量。可用来在实例之间进行通信,和跟踪改类实例的数目。如下图
2.静态方法
1.静态方法一般通过类名访问而不是实例对象,当然实例对象也可以访问不过不推荐。
2.静态方法里面只可以有静态变量,或其他静态方法,或者自己在静态方法内部定义的局部变量,不可以有非静态的成员变量。和非静态方法(因为内存加载的顺序问题)
3.静态方法中不可以有this
4.子类不能重写父类的静态方法,也不能把父类的非静态方法重写为静态的。可以声明和父类静态方法相同的方法对父类的静态方法进行隐藏。
5.main方法是程序的入口处,所以如果要在main方法中访问其所在类的成员变量或方法,就需要首先创建该类的实例对象。但是如果不是main方法而是其他方法,就可以通过变量名直接访问。
6.static{ }静态语句块在其所在类加载时就会执行,而且仅仅执行一次,常常用来进行静态变量的初始化。
private修饰的变量要想直接访问只能在本类中进行
默认的:可以在同一个包下的不同类中进行创建对象,进行直接访问
protected:在同一个包下或者有父子关系,就可以创建对象进行访问。