面向对象:
创建对象
类 对象名=new 类();
Cat cat=new Cat();
//类
class Cat{
}
构造方法
语法格式: 修饰符 类名(参数列表…){方法体}
作用 : 创建当前类的实例化对象.并初始化成员属性
注意:
- 如果不指定构造方法,系统会默认指定一个无参构造;如果我们指定了构造方法,不管我们指定的是无参还是有参,系统都不会再指定无参构造。但是建议大家在设置有参构造的时候,再指定一个无参构造。
public class Constructor_01 {
int age;
public static void main(String[] args) {
Constructor_01 c=new Constructor_01();
// 无参的 无法调用第一个方法(有参)
System.out.println(c.age);
}
public Constructor_01(int i) {
age=i;
}
public Constructor_01() {
age = 18;
}
}
- 不能加static,构造方法具有双重性
- 想要提供一个创建对象的方法,那么这个方法一定是静态的
- 静态方法中不能直接访问成员属性,成员方法中可以,所以想要初始化成员属性,必须放在成员方法中 ,所以构造方法是成员的
- 因此创建对象并初始化成员属性,这个方法必须具有静态和成员双属性
构造方法可以和成员方法同名,不用担心怎么区分,因为构造方法没有返回值这个键位
This
介绍
this是每个对象保存自身内存地址的一个引用类型的成员变量
- 表示对象自己,不能出现在静态上下文中,只能出现在成员方法中。
- 用哪个对象调用的成员方法,那么成员方法中的this就是表示哪个对象。
作用与用法:
-
用在成员方法中,方便区分同名的成员变量和局部变量
-
构造方法
- 同上
- 用于重装调用,用当前类中的其他构造方法,提高代码重用性
-
return this 可以返回当前对象的内存地址,能做到链式调用
// 创建一个对象(本类)
This_01 t = new This_01();
// 尝试输出对象t 这里是构造函数的赋值先赋值然后才是对象的成员变量
System.out.println(t);
// int i=t.m3();
// System.out.println(t);
// 链式调用
t.m1().m2();
System.out.println(t);
// 等价于
This_01 s=t.m1();
System.out.println(s);
}
public This_01 m1() {
int b = 1;
System.out.println(b);
System.out.println(this.b);
return this;
}
Super
结构
super(参数);
作用
保存父类特征
- 1,用于子类成员方法中,区分子类和父类同名的成员变量/成员方法
- 2,用于子类构造方法,第一种,同上 ,第二种,用于调用父类构造方法
用处
用在子类中,找父类
注意
- 必须在子类构造方法第一行
- this(xxx)和super(xxx)不能同时存在,两者都不能出现在静态上下文中; 当子类构造没有this(参数)和super(参数)时会默认一个super(),无参去调用;
Super_01(){
// 不写,默认会有super()调用父类无参构造
super();
System.out.println("子类构造");
}
int i=2;
public static void main(String[] args) {
Super_01 s=new Super_01();
s.m1();
}
private void m1() {
// 子类
System.out.println(i);
// 父类
System.out.println(super.i);
// 子类
System.out.println(this.i);
}
}
class A{
// 先输出父类构造方法
A(){
System.out.println("父类构造");
}
int i=10;
}
权限修饰符
- private:私有,除了当前类,在哪都调用不了
- public:公共,哪都能调用
- protected:继承权限,同包,同类,子类都可以,其他不行
- 默认(default):默认,默认为包权限,同包,同类可以,其他不行