Java-对象创建和成员可见性

如果不提供对super()的显示调用,编译器将会提供不带参数的super()调用,这会导致调用超类的无参构造函数。如果不提供无参构造函数,编译器会调用自己提供的无参构造函数。这只会发生在没有为类定义任何其他构造函数的情况下;否则编译器将会抛出异常。
如果已经定义了构造函数(不管是无参还是有参的),编译器将不会提供无参构造函数

创建复制构造函数

public class TimeOfDay {
    private int hour, mins;
    public TimeOfDay(int hour, int mins) {
        this.hour = hour;
        this.mins = mins;
    }

    //创建一个复制构造函数
    public TimeOfDay(TimeOfDay timeOfDay) {
        this(timeOfDay.hour, timeOfDay.mins);
    }   
}
  • toString()方法默认会返回对象的引用。

  • 如果构造函数中没有使用this或super调用,编译器将会添加一条隐式的super()调用,这会调用父类无参的构造函数。如果父类构造函数中没有此类构造函数,编译器将会触发错误

  • 如果编写自己的构造函数,编译器将不会提供默认的构造函数

final

  • 类:
    声明final类,可确保其他类无法对这个类进行扩展
public class final MyClass {
}
  • 方法:
    如果不想让子类重写某个方法,可以给其设置final属性。
    由于private和static方法不能在子类中重写,所以他们总是引式的final
  • 变量
    使用final的变量会被认为是常量,将不允许再被做修改。
    final变量不需要在声明时就初始化,可以在声明后的其他地方进行初始化,但是只能初始化一次
    属性为final的变量如果在声明时没有初始化,那么它的初始化必须放在构造函数中,因为它只在对象的声明周期中调用一次。如果在构造函数中进行初始化,就必须在所有的构造方法中都进行初始化。
public class Student {
    public final int ID;
    public Student() {
        ID = 10;
    }
}
  • 类变量
    final类变量仅仅保存的是指向对象的引用,那么引用必须保持不变,而非对象。对象状态依旧是可以被改变。
    final类变量不能指向除初始化时设置的对象之外的任何对象。

成员可见性

理解以下表格即可

同包同包不同包不同包
修饰符同类子类非子类子类非子类
publicYesYesYesYesYes
privateYesNoNoNoNo
protectYesYesYesYesNo
defaultYesYesYesNoNo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值