继承的概念
继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
继承的实现
class fu{
int age;
public void show(){
System.out.println("这是父类方法");
}
}
class zi extends fu{
public void print(){
System.out.println("这是子类方法");
}
}
public class tes {
public static void main(String[] args) {
//测试子类是否可以调用父类的成员
zi a=new zi();
a.age=45;
//测试子类是否可以调用父类方法
a.show();
}
}
总结
继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员,和方法
继承中的成员访问特点
class fu{
int age=10;
}
class zi extends fu{
int age=50;
public void show(){
System.out.println(age);
}
}
public class tes {
/*
测试继承中成员访问规则
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}
输出结果
class fu{
int age=10;
}
class zi extends fu{
int age=50;
public void show(){
int age=80;
//测试当前面加上super时
System.out.println(super.age);
}
}
public class tes {
/*
测试继承中成员访问规则
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}
输出结果
class fu{
int age=10;
}
class zi extends fu{
// int age=50; 测试当 当前类没有成员时的访问规则
public void show(){
System.out.println(age);
}
}
public class tes {
/*
测试继承中成员访问规则
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}
输出结果
总结
- 如果访问之前没有加super,访问规则时是就近原则,如果有super则访问父类中成员
- 如果子类中没有成员,就自动访问父类中成员
方法的重写
- 方法重写概念
- 子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)
- 方法重写的应用场景
- 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
实现
package Day01;
class fu{
int a;
public void show(){
System.out.println("调用父类方法");
}
}
class zi extends fu{
@Override
public void show(){
System.out.println("调用子类方法");
}
}
public class tes {
/*
重写方法
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}
方法重写的注意事项
package Day01;
class fu{
int a;
//测试子类是否可以重写私有方法
private void method(){
System.out.println("method 方法");
}
public void show(){
System.out.println("调用父类方法");
}
}
class zi extends fu{
@Override
public void show(){
System.out.println("调用子类方法");
}
@Override //这里爆红证明不可以重写父类私有的方法
private void method(){
System.out.println("dfdsfdsf");
}
}
public class tes {
/*
重写方法
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}
package Day01;
import jdk.nashorn.internal.runtime.Property;
class fu{
int a;
//测试子类是否可以重写私有方法
private void method(){
System.out.println("method 方法");
}
public void show(){
System.out.println("调用父类方法");
}
}
class zi extends fu{
@Override//编译不通过所有子类重写父类的访问权限要大有父类的权限
protected void show(){
System.out.println("调用子类方法");
}
@Override //这里爆红证明不可以重写父类私有的方法
private void method(){
System.out.println("dfdsfdsf");
}
}
public class tes {
/*
重写方法
*/
public static void main(String[] args) {
zi a=new zi();
a.show();
}
}