在子类父类的继承问题上,其实显示生活中的情景是一致的。比如,人与学生,可以说,这个人叫张三,这个学生叫李四,。也可以说这个人叫李四,这个学生叫李四,但是不能说这个学生叫张三。所以,父类的属性子类是不能覆盖的。另外,人与学生都有吃饭的方法,但是吃饭的方式是不同的。这就存在了方法的覆盖,比如:人 张三 = 学生 张三,调用人的吃饭方法,与调用张三那的吃饭方法,都是张三在吃饭,所以这就是方法的覆盖。注意:一切私有的东西【好吧,就叫东西】都是不能被别人调用,覆盖的。表达能力有限,附上代码以供参考- package com.chenkf.study;
- public class Student extends Person{
- public String name = "李四";
- private int age;
- public static void main(String[] args) {
- Person student = new Student(); //student 人的引用,实际上就是一个学生对象
- System.out.println(student.name);//打印出父类【人】的属性值
- Student s = (Student) student;//因为我们知道,这个人就是学生,就可以强制把人变为学生。
- System.out.println(s.name);//打印的是学生的名字
- System.out.println(student.getAge());//打印的是0,因为,子类覆盖了父类的getAge()方法
- student.eat();//调用的是子类的方法。
- //student.privateTest();//这个方法是不能调用的,因为是父类的私有方法
- s.privateTest();//调用本类的私有方法。ok
- //想要调用父类已被子类覆盖的方法,可以使用super关键字,因为在static与this,super不能同时存在,所有只能在写个非静态方法
- s.test();
-
-
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
-
- @Override
- public void eat() {
- System.out.println("子类吃饭。");
- }
-
- public void test(){
- super.eat();//调用父类的吃饭的方法。
- }
-
- private void privateTest(){
- System.out.println("我是李四");
- }
- }
- class Person{
- public String name = "张三";//父类的属性
-
- private int age = 10;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
-
- private void privateTest(){
- System.out.println("我是张三");//只能被本类方法调用。
- }
-
- public void eat(){
- System.out.println("父类吃饭。");
- }
- }
复制代码
|