封装:1.私有化属性成员
2.公开get、set方法,供外界访问
3.多元化的构造方法
构造方法:1.不需要返回值,void也可以省略
2.方法名与类名相同
3.在每次创建对象时自动调用
4.构造方法可以重载,可以有多个,可以利用参数初始化属性成员
5.自己没写时,编译器会给每个java类提供一个无参的构造方法,一旦自己自定义了,默认的无参的无效
创建对象:1.分配空间。2.初始化属性。3.调用构造方法
static{语句}静态代码块,类加载时(new)执行,多次new,只执行一次
{方法体} 实例代码块,每创建一个对象调用一次
若实例化两次(new两次)输出顺序:
静态代码块-->实例代码块-->构造方法-->实例代码块-->构造方法
继承:1.java单一继承,若没有声明父类,默认继承object类
2.构造方法不能被继承,用super()调用,必须写在子类构造方法的第一行
方法和属性可以被继承,继承下来的private修饰的那部分,不能直接调用,通过get、set方法调用
3.子类构造方法执行时默认调用父类的构造方法,如果父类没有默认的构造方法,崽子类的构造方法的第一行声明调用父类的构造方法
子类生成对象:1递归调用父类的构造方法2分配空间3属性赋值4本类的构造方法
子类创建父类对象,子类对象只能看到父类的东西
多态(一般指运行时多态):
编译时多态:方法重载(方法名相同,参数不同,参数个数不同或类型不同都可以,与返回值无关;不同类型的顺序不同也可以)。调用时严格类型匹配,若没有匹配的向上就近。
运行时多态:方法覆盖(子类覆盖父类的方法)(toString()和equals()方法一般需要被覆盖)
1.重写方法必须和被重写的方法具有相同的方法名称,参数列表和返回类型,只有方法体不同,方法名不同时,编译不会出错,很可能结果不对
2.重写方法不能使用比被重写方法更严格的访问权限
3.子类抛出的异常不能比父类宽
4.继承、重写父类的方法后,父类引用指向子类对象,调用父类的方法时会发生多态,即对象类型不变,还是父类类型,调用父类的方法,运行时寻找子类覆盖后的方法
若需要强制类型转换,先用instance of判断,若是同一个类型就转换,返回值,boolean类型
会发生类加载:1.实例化 A a = new A();
2.访问static修饰的成员变量时
3.访问子类加载父类,访问父类加载子类
实例化子类是,代码执行顺序:
父类static代码块->子类执行代码块->父类普通代码块->父类构造方法->子类普通代码块->子类构造方法。
访问控制
[table]
|修饰符|类内部|同一个包|子类|任何地方|
|private|yes||||
|default|yes|yes|在同一包中即可,否则不行||
|protected|yes|yes|yes(不管在哪)||
|public|yes|yes|yes|yes|
[/table]
class只能用public和default(不写)
2.公开get、set方法,供外界访问
3.多元化的构造方法
构造方法:1.不需要返回值,void也可以省略
2.方法名与类名相同
3.在每次创建对象时自动调用
4.构造方法可以重载,可以有多个,可以利用参数初始化属性成员
5.自己没写时,编译器会给每个java类提供一个无参的构造方法,一旦自己自定义了,默认的无参的无效
创建对象:1.分配空间。2.初始化属性。3.调用构造方法
static{语句}静态代码块,类加载时(new)执行,多次new,只执行一次
{方法体} 实例代码块,每创建一个对象调用一次
若实例化两次(new两次)输出顺序:
静态代码块-->实例代码块-->构造方法-->实例代码块-->构造方法
继承:1.java单一继承,若没有声明父类,默认继承object类
2.构造方法不能被继承,用super()调用,必须写在子类构造方法的第一行
方法和属性可以被继承,继承下来的private修饰的那部分,不能直接调用,通过get、set方法调用
3.子类构造方法执行时默认调用父类的构造方法,如果父类没有默认的构造方法,崽子类的构造方法的第一行声明调用父类的构造方法
子类生成对象:1递归调用父类的构造方法2分配空间3属性赋值4本类的构造方法
子类创建父类对象,子类对象只能看到父类的东西
多态(一般指运行时多态):
编译时多态:方法重载(方法名相同,参数不同,参数个数不同或类型不同都可以,与返回值无关;不同类型的顺序不同也可以)。调用时严格类型匹配,若没有匹配的向上就近。
运行时多态:方法覆盖(子类覆盖父类的方法)(toString()和equals()方法一般需要被覆盖)
1.重写方法必须和被重写的方法具有相同的方法名称,参数列表和返回类型,只有方法体不同,方法名不同时,编译不会出错,很可能结果不对
2.重写方法不能使用比被重写方法更严格的访问权限
3.子类抛出的异常不能比父类宽
4.继承、重写父类的方法后,父类引用指向子类对象,调用父类的方法时会发生多态,即对象类型不变,还是父类类型,调用父类的方法,运行时寻找子类覆盖后的方法
若需要强制类型转换,先用instance of判断,若是同一个类型就转换,返回值,boolean类型
会发生类加载:1.实例化 A a = new A();
2.访问static修饰的成员变量时
3.访问子类加载父类,访问父类加载子类
实例化子类是,代码执行顺序:
父类static代码块->子类执行代码块->父类普通代码块->父类构造方法->子类普通代码块->子类构造方法。
访问控制
[table]
|修饰符|类内部|同一个包|子类|任何地方|
|private|yes||||
|default|yes|yes|在同一包中即可,否则不行||
|protected|yes|yes|yes(不管在哪)||
|public|yes|yes|yes|yes|
[/table]
class只能用public和default(不写)