目录
十二、方法重写Override和方法重载Overload的区别?
二十、权限修饰符的默认修饰符。private、protected,public
一、什么是构造方法?
1.定义:
方法名和类名一致
没有具体返回值类型
没void
2.格式:
public 方法名和类名一致(空参/有参){}
无参构造方法:
有参构造方法:
3.注意事项:
一个类中如果没有提供任何构造方法,系统会默认提供一个无参构造方法
如果一个类中提供了有参构造方法,系统不会无参构造方法,如果你还要使用无参构造方法来创建类对象,报错!
类名 对象名 = new 类名() ; 默认执行的无参构造方法
构造方法是支持方法重载(方法名相同,参数列表不同,与返回无关)
二、成员变量(什么时候将变量定义为成员变量)
成员变量的赋值方式
1.setxxx(参数)赋值
2.有参构造器赋值
构造方法私有化后,使成员方法静态化(加入static静态方法),直接用 类名.方法名 调用。
如果这个需求能够描述现实世界事物的属性,这个时候才能将变量定义成员变量,全部都是局部变量!
因为局部变量它的生命周期:随着方法调用存在,随着方法调用结束而消失
三、类中的成员
标准类
1.成员变量
2.成员方法
3.构造方法
无参构造方法(默认)
有参构造方法
成员变量
类中的变量
四、static关键字
被static修饰符的变量以及方法----->“类成员”
特点:
1.随着随着类的加载而加载
2.优先于对象存在,不能和this共存
3.static能体现共享共用的意思
4.被static修饰的成员(变量/方法),推荐的访问方式:
类名.静态变量 类名.静态方法名()
也可以使用类名 对象名 = new 类名() ;
对象名.静态变量() (不推荐)
对象名.静态方法() (不推荐)
注意事项:
1.非静态的方法,既可以访问静态也可以访问非静态(要么访问静态变量/静态的方法)
2.静态只能访问静态的东西(静态变量/调用静态方法)
五、代码块
静态代码块:
类一加载,静态代码块先执行,类只加载一次,静态代码块也只加载一次。
静态成员位置:类的成员位置,
应用:读取配置文件,完成核心文件的加载
局部代码块:
在局部位置(方法定义中)定义的{},
作用:限定某个变量的生命周期
构造代码块:
每创建一个对象,就执行一次构造代码块
1. 在类成员的位置
如果类中有,先执行构造代码块,再执行构造方法。
2. 可以将构造方法中共性的内容,提取到代码块中。
一个类中如果有静态代码块,有构造代码块,有构造方法
优先级:静态代码块 > 构造代码块 > 构造方法
六、引入继承(extends)
什么是继承?
将多个事物(类)的共性内容抽取到一个独立的事物(类)中这个事物(类)和其他事物(其他类)之间产生的一种关系叫做"继承"
格式:
class 父类名(超类){
共性内容:属性私有化
对外提供公共的访问方法
}
class 子类名 extends 父类名{
}
好处:
1.提高了代码的复用性
2.提高了代码的维护性
3.类与类产生的继承关系是多态的前提。
特点:
1.类与类之间的关系,只支持"单继承"
2.不支持多继承,但可以"多层继承"
弊端:
继承的关系:是存在局限性,不要为了使用部分功能去使用继承
打破了封装性
注意事项:
1.子类只能继承父类所有的非私有的成员,私有成员可以间接访问(成员方法和成员变量)
2.子类不能继承父类的构造方法,但可以通过super去访问父类中的构造方法
3.如果A类属于B类,或者B类属于A类时,这个时候使用继承
七、继承的成员变量访问问题
1.子类继承父类,如果子类和父类的成员变量名称不一样,分别访问即可
2.子类继承父类,如果子类和父类成员变量的名称一致,访问采用就近原则
1)首先先在子类的局部位置(成员方法)找,如果有,就使用
2)如果子类的局部位置没有,那么就在子类的成员位置中找,有就使用
3)如果子类的成员位置也没有,那么就在父类的成员位置中找,有就使用,
4)如果父类也没有,继续往他的父类上找,最终顶层父类中都没有,那么报错(找不到这个变量!)
八、继承构造方法访问问题:super来访问
1.子类继承父类,子类所有的构造方法的默认第一句都是super()访问父类的无参构造方法
2.如果父类中没给出无参构造方法,会怎样,如何解决?
子类会全部报错,子类的所有构造方法都默认访问父类的无参构造方法(子类所有构造方法的第一句话super();可以省略)
解决方法:
1)永远给出类的无参构造方法
2)让子类的所有构造方法显示访问父类的有参构造方法(只要父类出现初始化,执行构造方法就是初始化)
3)子类的所有构造方法中某一个只要能够让父类初始化即可
创建Zi zi = new Zi() ; 在执行Zi类的无参构造方法的时候
让它先执行子类的有参构造方法 this(xx) ;
让后在子的有参构造方法中,让它先让父类初始化 super(xx) ; 访问父类的有参构造方法
子类的无参构造方法 访问父类的无参构造方法
子类的有参构造方法 直接访问父类的有参构造方法