对象属性的调用_面向对象的三主线之一:Java类及类的成员(1)
01
属性
属性的赋值过程
①默认初始化值
②显式初始化
②在代码块中赋值
③构造器中初始化
④通过“对象.方法”或“对象.属性"方法赋值
注:显式初始化和代码块中赋值的先后取决于其顺序
this.属性
“this.属性”表示调用当前对象的属性。通常情况下省略“this”,只有在特殊情况下才会显式使用。
>>方法的形参和属性同名时
super.属性
“super.属性”表示调用当前父类中声明的属性。通常情况下省略“super”,只有在特殊情况下才会显式使用。
>>子父类定义同名的属性,想在子类中调用父类中声明的属性时。
属性继承
当子类继承父类后,子类就获得了父类中声明的属性包括声明为private的属性,只是因为封装性的影响,使得子类不能直接调用父类的私有属性。
创建子类对象,就会在堆空间中加载所有父类中声明的属性。
多态性不适用于属性
多态性只适用于方法,不适用于属性,是因为在多态中,属性的编译运行都看左边。
static修饰属性
实例变量 VS 静态变量
实例变量:每个对象都拥有一套类中的非静态属性,当修改其中一个对象的非静态属性时,不会导致其他对象中该属性的值发生变化。
静态变量:多个对象共享一个静态变量,当通过某一个对象修改讲台变量时,会导致其他对象调用此静态变量时是修改后的。
静态属性的说明
静态变量是随着类的加载而加载的,早于对象的创建。
由于类只会加载一次,静态变量在内存中也只会存在一份,存在于方法区的静态域中。
静态变量可以通过“类.属性”和“对象.属性”调用,实例变量仅可以通过“对象.属性”调用。
final属性
final修饰属性,可以考虑的位置:
>显式初始化
每个对象值一样时使用
>代码块中初始化
通常调用方法可能抛出异常时用
>构造器中初始化
每个构造器都得赋值,每个对象值都不同
static final 修饰属性
该属性即为全局变量,在类中始终不变的一个常量。
内部类和属性
>内部类调用外部类属性:“外部类.this.属性”
>内部类中可以定义属性
>“this.属性”指的是内部类的属性
代码展示一
class Base {int count = 10;
public void display() {
System.out.println(this.count);
}
}
class Sub extends Base {
int count = 20;
public void display() {
System.out.println(this.count);
}
}
public class FieldMethodTest {
public static void main(String[] args) {
Sub s = new Sub();
System.out.println(s.count);//20
s.display();//20
Base b = s;//多态性
System.out.println(b == s);//true
System.out.println(b.count);//10
b.display();//20
}
}
代码展示二
public class CircleTest {public static void main(String[] args) {
Circle c1 = new Circle();
Circle c2 = new Circle();
Circle c3 = new Circle(3.4);
System.out.println("c1的id:" + c1.getId());
System.out.println("c2的id:" + c2.getId());
System.out.println("c3的id:" + c3.getId());
System.out.println("创建的圆的个数为:" + Circle.getTotal());
}
}
class Circle {
private double radius;
private int id;// 自动赋值
public Circle() {
id = init++;
total++;
}
public Circle(double radius) {
this();
this.radius = radius;
}
private static int total;// 记录创建的圆的个数
private static int init = 1001;// static声明的属性被所有对象所共享
public double findArea() {
return 3.14 * radius * radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public int getId() {
return id;
}
public static int getTotal() {
return total;
}
}
总结
以上是生活随笔为你收集整理的对象属性的调用_面向对象的三主线之一:Java类及类的成员(1)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 华为荣耀手机指令代码大全_双十二,华为/
- 下一篇: java 销毁线程_线程 学习教程(一)