重写(Override)
重写是子类
对父类
允许访问的方法
的实现过程进行重新编写, 返回值和形参都不能改变
。
即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。
也就是说子类能够根据需要实现父类的方法。
方法的重写和属性无关
关注public static
换成private static
必定不行
使用public static
(静态方法)实例
主程序App.java
public class App {
public static void main(String[] args) {
//创建父类对象
Father father=new Father();
//执行父类方法
father.test();
//方法的调用只和左边的数据类型有关
//创建子类对象
Sun sun=new Sun();
//执行子类方法
sun.test();
//父类的引用指向了子类对象
//父类创建一个子类对象
Father newFather=new Sun();
//执行父类方法
newFather.test();
/*
子类引用指向父类对象是不行的
Sun newSun=new Father();
newSun.test();
*/
}
}
父类Father.java
public class Father{
//1.父类方法
public static void test(){
System.out.println("我是爸爸");
}
}
子类Sun.java
public class Sun extends Father{
//2.子类继承父类
//因为有继承关系,所以创建了父类子类对象后方法都共享了
public static void test(){
System.out.println("我是儿子");
}
}
执行结果
我是爸爸
我是儿子
我是爸爸
使用public
(去掉static)表示重写(非静态方法)实例
主程序App.java
public class App {
public static void main(String[] args) {
//创建父类对象
Father father=new Father();
//执行父类方法
father.test();
//方法的调用只和左边的数据类型有关
//创建子类对象
Sun sun=new Sun();
//执行子类方法
sun.test();
//3.父类的引用指向了子类
//父类创建一个子类对象
Father newFather=new Sun();
//执行父类方法
newFather.test();
/*
子类引用指向父类是不行的
Sun newSun=new Father();
newSun.test();
*/
}
}
父类Father.java
public class Father{
//1.父类方法
public void test(){
System.out.println("我是爸爸");
}
}
子类Sun.java
public class Sun extends Father{
//2.子类继承父类
//因为有继承关系,所以创建了父类子类对象后方法都共享了
public void test(){
System.out.println("我是儿子");
}
}
执行结果
我是爸爸
我是儿子
我是儿子
总结:
子类是静态方法
执行的是父类方法
,
子类是非静态方法
执行的是子类方法
(重写
)。
权限级别:
public > protected > default > private
重载(Overload)
重载:
在同一类中方法名相同
,参数不同
主程序App.java
public class App {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.teach(25);
teacher.teach("张","数学");
}
}
类Teacher.java
public class Teacher{
public int teach(int age){
System.out.println("老师的年龄是:"+age+"岁");
return age;
}
public String teach(String firstName,String subject){
System.out.println(firstName+"老师教"+subject);
return firstName;
}
}
执行结果
老师的年龄是:25岁
张老师教数学