封装操作和我们利用遥控器调节音量控制电视机很类似
person.salary=2000;//报错了因为salary是private的所以只能在本类使用
这里就体现出来封装的重要性,对于私有属性的数据不能随意更改和访问
package Java_base_study; public class Encap_example { public static void main(String[] args) { Person person = new Person(); //尝试去对于person 对象赋初值 //使用传统方法 person.name="zlh"; //person.salary=2000;//报错了因为salary是private的所以只能在本类使用 //这里就体现出来封装的重要性,对于私有属性的数据不能随意更改和访问 //既然如此我们该怎么办呢? //这里我们就要借助Person类的set()和get()方法,它们是可以访问private属性的数据的呀 person.setSalary(2000);//成功!!! } } class Person { //定义一个Person 类要求除了人名其他都对外保密 public String name; private int age; private int salary; private String job; 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; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } }
这里需要注意非私有属性和方法可以在子类直接访问(为什么默认属性的数据也可以直接访问呢?)
在同一个包下默认访问修饰符可以访问父类
但是假如跨包了就不能访问
打个比方:
Package1:
Class Student (属性有默认的int age,私有的private int score)
Class grduate(extends Student)------>这时候由于他俩在一个包下所以子类可以访问父类的默认属性信息int age
Package2:
Class pupil(继承可以跨包吗?不管能不能反正现在pupil子类一定没办法访问到父类的默认属性信息int age)
子类构造器在调用时必须先去调用父类的构造器
顺序:
父类构造器被调用()
子类构造器被调用()
假如父类没有提供无参构造器,必须在子类构造器中用super关键字指定调用父类的哪个构造器
比如:父类只有一个有参构造器 public Student (String name,int age){
this.name=name; this.age=age;
}
此时由于父类没有提供无参构造器,我们需要在子类构造器中加入super(“小张”,100);
表明我们调用的是public Student (String name,int age)这个构造器
super()只能在构造器中使用,且必须放在第一行
在构造器中可以使用this()调用另一个构造器但是必须放在第一行,所以this()和super()语句不能共存
java所有类都是Object类的子类, Object是所有类的基类.
子类最多只能直接继承一个父类(单继承机制)