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、修饰类:表明该类是最终类,不能被继承;(无子类)
方法的重写:
继承中,当子继承父类的所有属性与方法时,子类需要对父类中的某一个方法重新定义时,(父类中的方法不能满足子类要求的时候),就要对这个方法进行重写,当代码执行时,只会执行子类改方法,不会执行到父类的同名方法(因为那个方法已经被重新写了)