JAVA中的继承

 Java使用extends关键字来实现继承:

例如

person类

class Person {
    private String name;
    private int age;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
}

student类

class Student {
    private String name;
    private int age;
    private int score;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
    public int getScore() { … }
    public void setScore(int score) { … }
}

 我们会发现,student中包含了person所有属性及方法,只是多出了一个score属性,其实这个时候就可以通过继承来进行,就可以避免写太多的内容:

class Person {
    private String name;
    private int age;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
}

class Student extends Person {
    // 不要重复name和age字段/方法,
    // 只需要定义新增score字段/方法:
    private int score;

    public int getScore() { … }
    public void setScore(int score) { … }
}

student的代码通过继承就可以写的相对简练

所以继承就是把两个类中,相同的方法、属性,直接包在父类中,这样就可以直接通过继承父类,继承到父类所有的方法与属性;但是只会继承到public相关的内容,如果被private修饰,则子类就不可以继承查看到; 

class Person {
    private String name;
    private int age;
    public int score=90;

    public String getName() {...}
    public void setName(String name) {...}
    public int getAge() {...}
    public void setAge(int age) {...}
}

class Student extends Person {
    // 不要重复name和age字段/方法,
    // 只需要定义新增score字段/方法:
    public int score=40;

    public int getScore() { … }
    public void setScore(int score) { 
     }
        public void show(){
            int score=20;
            System.out.println(score);//1
            this.score;//2
            super.score;//3
    }
}

 this关键字:

        通过this关键字可以明确访问一个类的成员变量,解决成员变量与局部变量名称相同导致的冲突问题

用法:

        当一个类中,定义了成员变量name、age,而在这个类下,创建了构造方法也定义了name跟age这些局部变量;他们两个的变量名是一致的;如果正常下使用name的话,是访问局部变量中的name;那如果是想要访问到成员变量,则需要通过this.name进行访问

super关键字:

        通过super.属性名或是super.方法名,表示调用父类的属性或是方法。也是一个特殊语法,不是变量,没有什么类型。        

super的另外一个作用是调用父类的protected函数。只有通过"super"这个魔咒,我们才能操作父类的protected成员,别无它法

所以从上方代码中可以看出:

1、这边score输出的是,方法中的局部变量20;

2、这边通过this调用的是成员变量中的40;

3、这边通过super调用的是父类中的变量,90

 

protected 权限修饰符

但是我们会发现,父类中的属性都是使用private修饰,这会导致,子类无法访问到被private修饰的属性与方法,这边的话,student类就无法访问到person类中的name跟age字段

所以为了防止这一类问题产生,为了让子类可以访问到父类的这些字段,需要将之前private修饰的属性,改为protected修饰后就可以被子类访问;

protected关键字可以把字段和方法的访问权限控制在继承树内部,一个protected字段和方法可以被其子类,以及子类的子类所访问

权限修饰符作用的范围:

 

final修饰词:

final关键字是最终的意思,可以修饰成员方法,成员变量,类 

 final修饰的特点

1、修饰方法:表明该方法是最终的方法不能被重写;例如当子类继承了父类,父类中有对应final修饰的方法,则子类就不可以重写改方法

2、修饰变量:表明该变量是常量,不能再次被赋值

3、修饰类:表明该类是最终类,不能被继承;(无子类)

方法的重写:

        继承中,当子继承父类的所有属性与方法时,子类需要对父类中的某一个方法重新定义时,(父类中的方法不能满足子类要求的时候),就要对这个方法进行重写,当代码执行时,只会执行子类改方法,不会执行到父类的同名方法(因为那个方法已经被重新写了)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值