Java-变量的隐藏和方法的重写(覆盖)

变量的隐藏

子类定义的属性的名字跟从父类中继承过来的属性名字一致,子类新定义的属性会覆盖从父类中继承过来的属性

public class Test1 {
    public static void main(String[] args) {
        Boss boss=new Boss();
        System.out.print(boss.name);//刘备
    }
}
class Person{
    String name="关羽";
}
class Boss extends Person{
    String name="刘备";
}

方法重写(方法覆盖)

子类可以覆盖从父类中继承过来的同名的方法
1)只能在父类和子类之间出现
2)返回值类型,方法名,参数列表都必须跟父类继承过来同名方法一致

public class Test1 {
    public static void main(String[] args) {
        Eoo2 eoo2=new Eoo2();
        System.out.println(eoo2.function1(10, 10));
    }
}
class Eoo1{
    int function1(int num1,int num2){
        return num1+num2;
    }
}
class Eoo2 extends Eoo1{
    int function1(int num1,int num2){
        return num1*num2;
    }
}

方法重载和方法重写的区别
1)方法重载是在一个类的内部
方法重写是在父类和子类之间
2)方法重载是一个类当中包含多个同名的方法,但参数不同
方法重写是子类的方法覆盖父类中同名的方法

public class Test1 {
    public static void main(String[] args) {
        Foo2 foo2=new Foo2();
        foo2.show(12);
        foo2.show(12, 23.1);
    }
}
class Foo1{
    void show(int num1){
        System.out.println(num1);
    }
}
class Foo2 extends Foo1{
    void show(int num1,double num2){//方法重载
        System.out.println(num1);
        System.out.println(num2);
    }
    void show(int num1){//方法重写
        System.out.println("num1+1="+(num1+1));
    }
}

this和super
1、this.方法:调用当前子类的方法
     super.方法:调用被覆盖父类的方法

public class Test1 {
    public static void main(String[] args) {
        Koo2 koo2=new Koo2();
        koo2.f1(10, 10);
    }
}
class Koo1{
    void function1(int num1,int num2){
        int sum=num1+num2;
        System.out.println(sum);
    }
}
class Koo2 extends Koo1{
    void function1(int num1,int num2){
        int result=num1*num2;
        System.out.println(result);
    }
//编写f1方法:先执行:num1+num2(父类function1方法)
//           再执行:num1*num2(子类function1方法)
    void f1(int num1,int num2){
        System.out.println("调用父类被重写的function1");
        super.function1(num1, num2);
        System.out.println("调用子类的function1");
        this.function1(num1, num2);
    }
}

2、构造方法调用
super(参数):调用父类带参数的构造方法
this(参数):调用子类的其他的构造方法

public class Test1 {
    public static void main(String[] args) {
        Eoo2 eoo2=new Eoo2("张",23,5500.0);
        System.out.println(eoo2.name+","+eoo2.age+","+eoo2.salary);
    }
}
class Eoo1{
    String name;
    int age;
    Eoo1(String name,int age){
        this.name=name;
        this.age=age;
    }
}
class Eoo2 extends Eoo1{
    double salary;
    Eoo2(String name,int age,double salary){
        super(name,age);//调用父类的带参数的构造方法
        this.salary=salary;
    }
}
public class Test1 {
    public static void main(String[] args) {
        Aoo1 aoo=new Aoo1(12,"刘");
        aoo.show();
        Aoo1 aoo1=new Aoo1(22,"张",5000,"上海");
        aoo1.show();
    }
}
class Aoo1{
    int age;
    String name;
    double money;
    String address;
    Aoo1(int age,String name){
        this.age=age;
        this.name=name;
    }
    Aoo1(int age,String name,double money,String address){
        this(age,name);//this(参数):调用本类中的其他构造方法
        this.money=money;
        this.address=address;
    }
    void show(){
        System.out.println(name+","+age+","+money+","+address);
    }
}

猜你喜欢

转载自www.cnblogs.com/peiya/p/12691132.html