
关于this 与 super
java 体验AI代码助手 代码解读复制代码//只有在构造方法里面,才能用super/this来调用构造方法
public class Persion{
public String name;
public int age;
public Persion(){
}
}
public class Student extends Persion{
public String name;
public int age;
public Student(String name, int age){
this.name = name;
this.age = age;
super.age = age;
}
public Student(String name){
this(name, 0); //使用this 调用构造方法
super(); //使用super 调用父类构造方法
}
}1、子类的构造方法必须先调用父类的构造方法,再执行后面的代码。 即子类构造方法的第一句默认为 super(); 目的是让父类比子类先初始化。 如果显式的调用 super(), 默认的就无效了。 所以上面例子会报错,因该改为:
java 体验AI代码助手 代码解读复制代码public Student(String name){
super(); //使用super 调用父类构造方法
this(name, 0); //使用this 调用构造方法
}2、上面改后依然报错,提示 this(name, 0) 必须放在第一行。 因为有参构造方法里面也有 super() 这里第一行也是 super() 导致父类被加载两次,重复了。删除super()即可。
java 体验AI代码助手 代码解读复制代码public Student(String name){
this(name, 0);
}java 体验AI代码助手 代码解读复制代码// 问:子类对象的内存中,是否包含父类中定义的private成员变量
public class Persion{
private String name;
//提供getter和setter方法
}
public class Student extends Persion{
public int age;
}
Student st = new Student();
st.name; //报错
st.getName(); //证明name变量存到了student对象中了。
//private只是做访问控制,让外界不能直接访问name,但不代表name就不存在了。public:在任何地方都可见 protected:仅在本包中,自己子类中可见 default(无修饰符):仅在本包中可见 (所以无修饰符又叫包私有权限) private:仅在自己类中可见
1.上述4个访问权限都可以修饰类的成员,比如成员变量、成员方法、嵌套类等(即类中的一切)
2.只有public、default可以修饰顶级类。(顶级类定义出来就是被使用的,定义成其他类型就无法被使用,失去了存在的意义)
3.以上4个访问权限不可修饰局部类,局部变量。(局部变量的作用域仅限在方法里,与访问权限的意义相矛盾)
java 体验AI代码助手 代码解读复制代码//一个java文件中,最外面的那个类叫顶级类
public class Persion{
//嵌套类
class ABC{
class Test{
}
}
public void test(){
// 修饰局部变量no
private int no = 10; //会报错
}
}1、成员变量private化,提供public的getter、getter方法。 toString(): println(对象引用),当参数为对象引用时,println会调用对象的toString方法
静态变量应用:比如统计创建了多少个对象
java 体验AI代码助手 代码解读复制代码public class Persion{
public static int count;
static {
count = 0; //也可在静态代码块中为静态变量赋值()
}
public Persion(){
count++;
}
} 本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。