类的相关知识:访问修饰符、返回值、this关键字、类成员
访问修饰符
含义:
设置访问权限
种类:
public:
所有类都能访问,同包下无需导包就可创建对象和使用类名.main()方法,使用其他方法需创建对象
protected:
1、异包子类:子类中能直接访问父类的属性和方法
2、异包非子类中创建了继承父类的子类对象,不能使用父类属性和方法。不能使用构造方法创建对象
3、同包非子类中创建了继承父类的子类对象,可以使用父类属性和方法
默认:
1、同包子类:子类中能使用父类的属性和方法
2、同包非子类:不用继承可直接调用构造函数进行创建对象,创建的对象可调用属性和方法
private:
所有属性或方法只能在类内使用
注:main方法中不能直接使用类属性和方法
使用场景建议:
除了常量,避免使用public
对特定严格的成员用private
返回return
功能:
将返回值传递出函数
跳出方法返回到调用它的代码
语法:
return 返回值;
当返回类型为void时:
return; 或不写,默认return;
注:基本类型的返回值类型必须与方法声明中方法的返回类型相同
扩展:当返回类型时引用类型时返回值的类型必须是声明类型的子类或相同类型
当返回类型为接口时,返回对象必须实现指定接口,相当于返回接口的对象或实现接口的类的对象
//声明接口
interface A{
void runA();
}
//实现接口
static class B implements A{
@Override
public void runA() {
System.out.println("B实现A接口");
}
A returnB_A(){
return this;
}
A returnA_A(A a){
return a;
}
}
public static void main(String[] args) {
B b = new B();
//接口为返回类型时可以传递实现接口的类
System.out.println(b.returnB_A());
A a = ()-> {};
//接口为返回类型时可以传递接口对象
System.out.println(b.returnA_A(a));
}
this关键字
作用1:
在方法中表示当前调用方法的对象,用来区分同名的方法体内的局部变量
public Student(short age, String name, char gender){
this.age = age;
this.name = name;
this.gender = gender;
}
作用2:
重载构造方法:
当重载时对于原构造方法已经初始化的参数,可通过this(原构造方法中的参数)来减少代码的重用,this相当于上一个构造方法,括号内为上个构造方法所需传递的参数。注:this()只能在构造方法的第一句话,且不能两个方法来回调用,会形成递归
public Student(short age) {
this(age, "", '男', 2000);
}
public Student(short age, String name, char gender){
this.age = age;
this.name = name;
this.gender = gender;
}
public Student(short age, String name, char gender, int salary){
this(age, name, gender);
this.salary = salary;
}
使用场景:
常用于构造方法
类成员
含义:
与类相关联,不存储在对象中,只位于内存的固定位置,类的每个实例共有一个类成员(变量或方法)
类变量
语法:
声明变量时前面加上static
static 数据类型 变量名;
使用:
使用时不需创建对象
由对象调用(不推荐,体现不出类变量):
对象名.变量名;
由类名直接调用:
类名.变量名;
使用场景:
当类型需要一个整体的变量,如记录创建对象的个数可用类变量记录
类方法
语法:
声明方法时前面加上static
static 返回类型 方法名(参数列表){方法体}
使用:
使用时不需创建对象
由对象使用(不推荐):
对象名.方法名(参数列表);
由类直接调用:
类名.方法名(参数列表);
注:
类方法为不能访问属性或实例方法(类中没有static修饰的方法)
类方法中不能有this关键字,因为类方法不由对象调用,没有this引用的实例
static class A{
//声明类变量
static int a;
//声明类方法
static void runA(){
System.out.println("runA");
}
}
public static void main(String[] args) {
//通过类名使用
A.a = 0;
System.out.println(A.a);
A.runA();
//通过对象修改(不推荐)
A a1 = new A();
a1.a += 1;
System.out.println(A.a);
}

浙公网安备 33010602011771号