EveryThing is Object !
this调用其他构造方法时候,this必须作为第一条语句,然后才是其他语句。
父类非私有化属性和方法可以默认继承到子类,若父类中私有方法被子类调用的话,则编译报错。
父类构造方法,子类不可以继承,更不存在覆盖的问题。(非构造方法可以)。
如果子类中访问父类的构造方法,则在编译的时候提示访问不到该方法。
Java的数据结构为树型结构,而非网状。Java通过接口和内部类实现多继承。
方法重载并不一定是在一个类中,子类可以从父类继承一个方法,也可以定义一个同名异参的方法,也称为:overloading
当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,称为覆盖,注意,返回值类型必须相同,不然报错。若方法不同,则成重载。
对于方法的修饰词,子类方法要比父类方法范围要更加广泛。
父类为public 子类为private ,则报错。
之所以构造方法先运行父类后运行子类是因为构造方法是无法覆盖的。
以下范围由严到宽:
1.private :本类访问;
2.default :默认,不仅本类访问,而且是同包可见。
3.protected :同包可见+不同包的子类可见。
4.public :表示所有地方均可见。
当构造一个对象的时候,系统先构造父类对象,再构造子类对象。
构造一个对象的顺序:
1.递归构造父类对象;
2.顺序地调用本类成员属性赋值语句;
3.本类的构造方法。
Super()表示调用父类的构造方法。
Super()也和this一样必须放在第一行。
This() 用于调用本类的构造方法。
如果没有定义构造方法,那么会调用父类的无参构造方法,即super()。
良好的编程习惯:加上默认的父类无参的构造方法。
多态:多态是指编译时候的类型变化,而运行时候的类型是不变的。
多态分为两种:
1.编译时多态:编译时动态重载。
2.运行时多态:指一个对象可以具有多个类型。
运行时多态的三原则:(应用时为覆盖)
1.对象不变;
2.对于对象的调用只能限于编译时的类型的方法。如调用运行时类型方法报错。
instanceof 用于判定是否将前面对象的变量赋值给后边的类名。
instanceof 用于强制类型转换之前判定变量是否可以强制转换。
运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。
overloading针对的是编译时类型,不存在运行时的多态。
Static定义的是一块为整个类共有的一块存储区域,其发生变化时候访问到的数据都是经过变化的。
·静态方法不需要有对象,可以使用类名调用,静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象的概念。
main 方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。
覆盖,不适用于静态方法。
静态方法不可被覆盖,允许在子类中定义同名静态方法,但是没有多态,严格讲,方法间没有多态就不能称为覆盖。
当static 修饰代码块时(注:次代码块要在此类的任何一个方法之外) ,那么这个代码块在代码被装进虚拟机生成对象的时候可被装载一次,以后再不执行了。
一般静态代码块被用来初始化静态成员。
static 通常用于Singleton模式开发。
Singleton是一种设计模式,高于语法,可以保证一个系统中仅有一个对象。
构造器:
1.Java构造器在类内部声明
2.方法名和类名一致的方法叫做构造方法
3.构造方法不能声明返回值类型
4.构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件。
new :创建对象实例
1.根据类的属性在堆中分配对象空间,并且自动初始化实例变量。
2.根据参数类型调用构造器(this编译时不存在,运行时存在)
3.new运算返回对象的引用地址
this 是局部变量,构造方法调用结束后和参数一样消失。
this 是对当前对象的引用,是运行期间当前对象的本身。
可以使用this明确访问当前对象的属性或者方法,类似于“我”。
this() 可调用本类的其他构造器,可以使用构造器的重用简化代码的实现。
this()必须写在构造器的第一行,因为在构造器之前是没有对象的。
Java类一定有构造器,当使用new关键字时,JVM必定调用构造方法创建对象。
如果没有声明任何构造器,javac自动提供一个(无参)。
子类构造器,默认调用父类无参构造器!
super()表示调用父类构造器
使用super()调用父类构造器,必须写在子类构造器第一行。
this() 必须写在子类构造器第一行。
有super() 就不能有this() ,两者互斥。
如果,父类没有无参构造器,就必须在子类中明确指定调用父类的有参构造器!
建议:所有的类都提供无参构造器,减少集成时候的麻烦。