方法重载
在同一个类中定义多个方法,方法的功能类似,只是方法内参数不同,但是方法名相同。
class Hello {
public void hello() {
System.out.println("Hello, world!");
}
public void hello(String name) {
System.out.println("Hello, " + name + "!");
}
}
继承
继承有个特点,就是子类无法访问父类的private字段或者private方法。例如,Student类就无法访问Person类的name和age字段:
class Student extends Person {
// 不要重复Person类已有的字段/方法,
// 只需要定义新增score字段/方法:
private int score;
public int getScore() { … }
public void setScore(int score) { … }
}
- toString():把instance输出为String;
- equals():判断两个instance是否逻辑相等;
- hashCode():计算一个instance的哈希值。
如果父类中的某一个方法不允许被子类重写,可以把该方法标记为final。同样用final修饰的类也不可以被继承。
class Person {
public final String name;
public Person(String name) {
this.name = name;
}
}
在构造方法中初始化final字段,保证实例一旦被创建就不可以被修改。
1.private 表示私有,只有自己类能访问
2. default表示没有修饰符修饰,只有同一个包的类能访问
3. protected表示可以被同一个包的类以及其他包中的子类访问
4. public表示可以被该项目的所有包中的所有类访问
一般父类中定义的变量用protected 这样可以被子类访问
多态 Polymorphic
overload 重载
override 重写
如果方法签名不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override。
方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。在Java程序中,出现这种情况,编译器会报错。
多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。
构造方法
构造方法目的是:规定在默认的位置输入固定类型的值
构造方法与set()和get() 两者的区别就在于:
-
构造方法主要用于:定义一种规则,初始化值
-
setXXX()与getXXX()主要用于:修改值,获取值
如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。
子类不会自动继承父类的构造方法
阻止继承
正常情况下,只要某个class没有final修饰符,那么任何类都可以从该class继承。
从Java 15开始,允许使用sealed修饰class,并通过permits明确写出能够从该class继承的子类名称。
向上转型
如果Student是从Person继承下来的,那么,一个引用类型为Person的变量,能指向Student类型的实例
Person p = new Student();
向下转型
为了避免向下转型出错,Java提供了instanceof操作符,可以先判断一个实例究竟是不是某种类型。