java的private新认识

本文探讨了Java中私有属性的访问方式,并通过实例代码展示了如何在一个类的方法中通过对象引用访问另一个对象的私有属性。

一直以来都认为private修饰的属性只能在类内部才能访问,如果该类内部传入一个该类对象进来,通过该对象能否直接访问它自己private所修饰的属性呢,我们来看一下

public class TT {
    public static void main(String[] args) {
        Man t1 = new Man();
        Man t2 = new Man();
        t1.setAge(15);
        t2.setAge(13);
        System.out.println(t1.compareTo(t2));
    }
}

class Man {
    private int age;

    public void setAge(int age) {
        this.age = age;
    }

    public int compareTo(Man m) {
        return this.age - m.age;
    }
}

 其实compareTo方法中,this和m所代表相似概念,this能做的m也能做,所以可以通过m直接访问age

虽然提供的参考引用中未直接提及头歌平台 Java 4.1 认识继承的学习资料,但可从这些引用中获取关于 Java 继承的关键信息用于学习。 Java 中不支持多继承,在实际项目,类的数量多且关系复杂,但不希望类之间的继承层次太复杂,一般不超过三层,若太多就需重构代码。还能使用 `final` 关键字从语法上限制继承[^1]。 从代码示例来看,子类能够继承父类的成员,前提是同包。如以下代码,`Son` 类继承 `Father` 类,可使用父类的 `name` 成员变量[^2]: ```java package com.alibaba.demo01; public class Father{ protected String name="小红"; } // 子类,子类可以继承成员,前提条件是同包 package com.alibaba.demo02; public class Son extends Father{ public void show(){ System.out.println("名字为:"+name); } } ``` 子类构造器可通过 `super(…)` 手动调用父类的有参数构造器来初始化继承自父类的数据。如下代码,`Teacher` 类继承 `People` 类,在 `Teacher` 类的构造器中使用 `super(name, age)` 调用父类的有参构造器[^3]: ```java package Arrr2; public class People { private String name; private int age; public People() { } public People(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } package Arrr2; public class Teacher extends People { public Teacher(String name,int age){ //调用父类构造器,初始化父类数据 //通过调用父类有参数构造器来初始化继承自父类的数据 super(name, age); } } package Arrr2; public class Test { public static void main(String[] args) { Teacher t = new Teacher("张三", 12); System.out.println(t.getAge()); System.out.println(t.getName()); } } ``` `this` 关键字指向自己,`super` 关键字用于调用父类方法。如下代码,`Dog` 类继承 `Animal` 类,在 `Dog` 类的 `eatTest` 方法中,`this.eat()` 调用自己的方法,`super.eat()` 调用父类方法[^4]: ```java class Animal { void eat() { System.out.println("animal : eat"); } } class Dog extends Animal { void eat() { System.out.println("dog : eat"); } void eatTest() { this.eat(); // this 调用自己的方法 super.eat(); // super 调用父类方法 } } public class Test { public static void main(String[] args) { Animal a = new Animal(); a.eat(); Dog d = new Dog(); d.eatTest(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值