1.protected 关键字
// 为了掩饰基类中不同访问权限在子类中的可见性,为了简单类B中就不设置成员方法了
// extend01包中
public class B {
private int a;
protected int b;
public int c;
int d;
}
// extend01包中
// 同一个包中的子类
public class D extends B {
public void method() {
// super.a = 10;// 编译报错,父类private成员在相同包子类中不可见
super.b = 20; // 父类中protected成员在相同包子类中可以直接访问
super.c = 30; // 父类中public成员在相同包子类中可以直接访问
super.d = 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问
}
}
// extend02包中
// 不同包中的子类
public class C extends B {
public void method() {
// super.a = 10; // 编译报错,父类中private成员在不同包子类中不可见
super.b = 20; // 父类中protected修饰的成员在不同包子类中可以直接访问
super.c = 30; // 父类中public修饰的成员在不同包子类中可以直接访问
// super.d = 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问
}
}
// extend02包中
// 不同包中的类
public class TestC {
public static void main(String[] args) {
C c = new C();
c.method();
// System.out.println(c.a); // 编译报错,父类中private成员在不同包其他类中不可见
// System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问
System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
// System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问
}
}
proceted:最多可以在不同包内的子类可以访问
在不同包的非子类不能访问
2.方法重写:
调用子类的优先使用子类自己的
注意事项:
1. 在重写的方法上标注Override注解,可以指定java编译器,检查我们方法重写的格式是否正确
2. 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public > protected > 缺省 )
3. 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
4. 私有方法、静态方法不能被重写,如果重写会报错的。
class Father{
//交朋友
public Father makeFriend(){
System.out.println("正在通过写信的方式交朋友~~~");
return null;
}
}
class Son extends Father{
//交朋友
@Override
public Father makeFriend() {
System.out.println("重写的方法");
return null;
}
}
1. 方法的重载为在同一个类中 方法的方法名相同 参数不同 的几个不同的方法
方法重写为在子类中对父类的方法不满意而改进的方法方法名和参数都和父类相同
this:强行访问本类中的成员方法 和 成员变量 都不能访问局部变量
super:强行访问父类中的成员方法 和 成员变量
3.final:
final 修饰成员变量时必须先通过就地初始化或者 构造器来初始化 否则会编译报错
不能因为 String类被final修饰
son保存的内容(地址)不能改变 但是地址只想空间里的内容可以改变
4.常量:
常量:
使用了static final修饰的成员变量就被称为常量, 通常用于记录系统的配置信息。
命名规范:
单词全部大写,多个之间使用_连接
优点:
1. 代码可读性更好,可维护性也更好。
2. 程序编译后,出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。
public class Demo {
public static void main(String[] args) {
//需求2: 保存学生的性别, 为提高性能,经常使用0和1表示性别
int gender = Constant.MAN;
}
}
class Constant {
//需求1: 定义一个常量,记录学校的名称
public static final String SCHOOL_NAME = "程序员";
public static final int MAN = 0;
public static final int WOMAN = 1;
}
5.枚举:
枚举本质是一种类
里面的内容为静态常量不可修改 所以可以用类名直接.调用
枚举是一种特殊类 它的构造方法为私有 不能创建对象 它被final修饰 不能被继承