Java面向对象5——类的继承与权限控制,重写与super

1 类的继承

  • Java中使用extends关键字实现类的继承机制,其语法规则为:   
    <modifier> class <name> [extends <superclass>]{... ...}
  • 通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。
  • Java只支持单继承,不允许多继承。一个子类只能有一个基类,一个基类可以派生出多个子类。
    class Parent{
        private   int n_private = 1;
                  int n_friendly = 2;
        protected int n_protected = 3;
        public    int n_public = 4; 
    }
    class Child extends Parent{
        public void f(){
            //n_private 无法访问所以不能进行赋值操作,其他可以
            n_friendly = 20;
            n_protected = 30;
            n_public = 40;
        }
    }

2 访问控制
  Java权限修饰符public protected private置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。
  这里写图片描述

  对于class的权限修饰只可以用public和default。public类可以在任意地方被访问,default类只可以被同一个包内部的类访问。

3 方法的重写(重写的时候可以直接将基类中的方法名复制到子类中,以免写错方法的名字)

  • 在子类中可以根据需要对从基类中继承来的方法进行重写。
  • 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
  • 重写方法不能使用比被重写方法更严格的访问权限。

    如下,基类Person的方法getInfo()在子类Student中进行重写:

    class Person {
        private String name;
        private int age;
        public void setName(String name){this.name=name;}
        public void setAge(int age) {this.age=age;}
        public String getName(){return name;}
        public int getAge(){return age;}
        public String getInfo() {
              return "Name: "+ name + "\n" +"age: "+ age;
      }
    }

    class Student extends Person {
        private String school;
        public String getSchool() {return school;}
        public void setSchool(String school)
        {this.school =school;}
        public String getInfo() {
          return  "Name: "+ getName() + "\nage: "+ getAge() 
                        + "\nschool: "+ school;
            }
    }

    public class TestOverWrite {
    public static void main(String arg[]){
            Student student = new Student();
            Person person = new Person();
            person.setName("none");
            person.setAge(1000);
            student.setName("John");    
            student.setAge(18);
            student.setSchool("SCH");
            System.out.println(person.getInfo());
            System.out.println(student.getInfo());
        }
    }

4 super关键字
  在Java类中使用super来引用基类的成分:

    class FatherClass {
        public int value;
        public void f(){
            value = 100;
            System.out.println("FatherClass.value="+value);
        }
    }

    class ChildClass extends FatherClass {
        public int value;
        public void f() {//重写f()
            super.f();
            value = 200;
            System.out.println("ChildClass.value="+value);
            System.out.println(value);
            System.out.println(super.value);
        }
    }

    public class TestInherit {
        public static void main(String[] args) {
            ChildClass cc = new ChildClass();
            cc.f();
        }
    }

 内存分析:
 这里写图片描述

 运行结果:这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值