public class Person {
private final int age;// 只声明 没有初始化 不能用 和 int age = 10 不一样
private final Dog dog; // 直接赋值时为常量 常量大写 可用static public 修饰 不可变 不灵活
public Person() { // 用 构造方法可以初始化操作 赋初始值
this.age = 20; // 在这个构造器中 只能初始化一次 在另一个构造器中还可以赋值 两个构造器平行
dog = new Dog();// 自定义类初始化;
}
public Person(int age, Dog dog) {
this.age = age;
this.dog = dog;
}
void setAge(int age) { // 进行赋值
// this.age = age;
}
int getAge() {
System.out.println(this.age);
return age;
}
void setDog(Dog dog) { // 无法用 set 方法 赋值 fianl 修饰的自定义类 地址不变
// 可以新开辟内存地址赋值
// this.dog = dog;
//System.out.println(this.dog);
}
Dog getDog() {
System.out.println(this.dog);
return dog;
}
}
Dog类中的属性可以改变 Person类中定义的final Dog类是地址值不变 但是可以改变 Dog中的属性
public class Dog {
private String name;
private String color;
void setName(String name) {
this.name = name;
}
String getName() {
System.out.println(this.name);
return name;
}
void setColor(String color) {
this.color = color;
}
String getColor() {
System.out.println(this.color);
return color;
}
public Dog(){
}
}
注意 构造方法 是用来初始化赋值的 普通 set 方法是用来赋值的 也叫设置值 有区别
public class TestFinal {
public static void main(String args[]) {
Person per = new Person();
per.getAge();
per.getDog();
Dog dog = per.getDog();
dog.setColor("blank");
dog.getColor();
Dog dog1 = new Dog(); // final 修饰的Dog类 是个地址 地址实例化进行构造器传值
Person person = new Person(20, dog1);// 构造器传值调用一次
dog1.setName("Mosa");
dog1.setColor("Yello");// 方法传值可以调用多次
dog1.getName();
dog1.getColor();
person.getDog().getName();
person.getDog().getColor();
Dog d = person.getDog();
d.setColor("Green");
d.getColor();
}
}
有两个行参的构造 dog1 是实例化的 注意 一个形参构造和两个形参构造传值调用输出的地址值不一样