域修饰符(访问控制符):控制变量和方法的访问范围
public(公开的、公共的):本类、本包、不同包的子孙类、不同包
protected(受保护的):本类、本包、不同包的子孙类
不加修饰符:本类、本包
private:本类
1.访问控制符修饰方法和修饰变量作用一样
2.希望你的变量和方法在任何地方使用就用public修饰
希望出了包无法用就不加修饰符
如果希望子类可以使用就用protected修饰
如果只想让在本类中使用,出了类不让别人使用就用private修饰
重写方法时,子类中的访问范围不能比父类小
例如 父类中该方法被protected修饰,子类重写访问控制符只能是protected或者pubilc
子类只能继承public和protected,如果在同包下不加修饰符也可以
public class Third {
public static void main(String[] args) {
//测试同一个包下
People people = new People();
people.age = 100;
people.height = 182;
people.name = "杨二";
//private修饰的出了类无法使用
Girl girl = new Girl();
//为name赋值
girl.setName("张三");
//直接打印对象时,本质上是调用了toString()方法,
String name = girl.getName();
System.out.println(name);
System.out.println(people.name);
}
}
一般情况下,成员变量都需要用private修饰;都需要是私有的
private String name;
private int age;
private String sex;
提供公开的setter方法用来为私有的成员变量赋值。
getter方法用来获取私有的成员变量变量值。
通过访问控制符,让外部都用setter和getter方法来访问成员变量,我么可以控制外部对该成员变量的访问权限
例如: 只让使用不让更改我们只提供getter方法不提供setter方法
成员变量私有化,通过get set方法访问,更加安全
set命名方法一般都是set后面拼接成员变量名 例如setName
public void setName(String name) {
//当局部变量和成员变量名一样时,默认为就近原则
System.out.println(name);//打印局部变量值
//可以通过this来区分同名变量 this.变量 肯定调用成员变量
this.name = name;
}
public String getName(){
//由于并没有一个局部变量和成员变量所有this.name 和name 都是成员变量
return name;
}
构造方法:在创建对象时,对对象进行初始化
构造方法使用在创建对象时
形式
[访问控制符] 类名 ([形参列表]){
}
1.没有返回值类型、方法名只能是所在类的类名
2.当我们没有定义构造方法时,会有一个默认的无参数的构造方法
一旦我们定义了构造方法,就不再提供默认的构造方法
3.一个类中可以有多个构造方法(构造方法可以重载)
构造方法不能被重写,因为构造方法的方法名必须和当前类一致,
重写是要求方法名和父类中对应的方法名一致
4.我们可以在构造方法中通过this([实参列表])调用本类中其他的构造方法,但只能在第一行调用
在成员方法中不能通过this([实参列表])这种方式调用构造方法,需要调用时只能是new 构造方法(...)
5.子类的构造方法中肯定会调用父类的构造方法
如果没有显式调用,默认在子类构造方法第一行,调用父类中无参的构造方法
6.如果父类中没有无参数的构造方法,那么我们就必须在子类的构造方法第一行,显式调用父类的某一构造方法