关于Java的继承

Java有 private、protected、public三种修饰符,那在子类中父类的那些属性、方法会被继承呢?经实际测试验证发现父类的所有属性、方法都会被子类继承,只是不同的修饰符在子类的访问存在一些差别

  1. private 修饰的属性和方法在子类中不能访问,只能通过父类或者父类的方法访问
  2. private修饰的方法在子类中不能@Override
  3. protected修饰的方法在子类中可以用@Override重写
  4. protected修饰的属性可以在子类直接访问
  5. public 修饰的方法后者属性在子类可以覆盖和访问

上代码,先是父类:

public class People {
    private String name ="people";
    protected String nickName ="小白云";

    public void sayHello(){
        getNameByPrivate();
        getNameByProtected();
        getNameByPublic();
    }
    private void getNameByPrivate(){
        System.out.println(this.getClass().getName() + " getNameByPrivate:" +name);
    }

    protected void getNameByProtected(){
        System.out.println(this.getClass().getName() + " getNameByProtected:" +name);
    }

    public void getNameByPublic(){
        System.out.println(this.getClass().getName() + " getNameByPublic:" +name);
    }

    public String getName(){
        return name;
    }
}

子类代码:

public class TomCruise extends People {
    private String name ="TomCruise";

    /**
     * 子类中重写了protected方法,调用时会调用到子类中的方法,可以加上@Override
     * 也可以不用加注解,效果都是一样的,@Override只是为了让编译器检查
     */
    protected void getNameByProtected(){
        System.out.println(this.getClass().getName() + " getNameByProtected:" +name);

        /**
         * 子类中可以直接访问父类的protected属性
         */
        System.out.println(this.getClass().getName() +" " +nickName);
    }

    /**
     * 重写public方法,子类调用时,调用重写的方法,如果不重写,子类是可以调用父类的方法(通过super关键字)
     */
    public void getNameByPublic(){
        System.out.println(this.getClass().getName() + " getNameByPublic:" +name);
        //super.getNameByPublic();
    }

    /**
     * 子类继承了父类的私有属性,但是不能访问,自能通过父类的方法来访问
     */
    public void getSuperNameByPublic(){
        System.out.println(this.getClass().getName() + " getSuperNameByPublic:" +super.getName());
    }
}

测试类及其结果:

public class ExtendMethodTest {
    @Test
    public void TestPrivateAndProtectedMethod(){
        TomCruise tCruise = new TomCruise();
        tCruise.sayHello();
        tCruise.getSuperNameByPublic();
    }
}

测试结果:

com.zengyg.jdk.TomCruise getNameByPrivate:people
com.zengyg.jdk.TomCruise getNameByProtected:TomCruise
com.zengyg.jdk.TomCruise 小白云
com.zengyg.jdk.TomCruise getNameByPublic:TomCruise
com.zengyg.jdk.TomCruise getSuperNameByPublic:people
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值