Java-继承

Java中的继承

关键字:extends、this、super

子类拥有父类的全部特性

方法重写,java中是单继承,只能继承一个父类,不过可以用接口来实现多继承

继承与成员变量之间的关系

  1. 当子类中的成员变量与父类中的成员变量一样的时候

    查找顺序为就近原则,查找失败则报错

    方法的局部范围——》子类中成员位置——》父类中的成员位置

继承的访问顺序:

  1. 父类中静态成员变量和静态代码块
  2. 子类中静态成员变量和静态代码块
  3. 父类中普通成员变量和代码块,父类的构造函数
  4. 子类中普通成员变量和代码块,子类的构造函数
//继承访问顺序举例
class X{
	Y b = new Y();//1
    X(){
        System.out.println("X");//2
    }
}

class Y{
    Y(){
        System.out.println("Y");
    }
}

class Z extends X{
    Y y = new Y();
    Z(){
        System.out.println("Z");
    }
}
public class Test2 {
    public static void main(String[] args) {
        new Z();
    }
}

//输出为: 

final关键字

特点:

  1. 修饰类,类不能被继承

  2. 修饰成员变量,变量变常量,且只能赋值一次,在构造方法调用之前赋值都可以

  3. final修饰成员方法之后,方法不能被重写,父类中的final方法可以被子类继承,但是不能被子类重写

举个栗子:

class Fu{
    final int num2;
    {
  //法一      num2 = 200;
    }
    public void Fu(){
  //法二     num2 =200
    }
}
class Fu2{
    public final void show(){
        System.out.println("这是父类中的show方法");
    }
}
//final修饰后就不能再进行重写了
class Zi extends Fu2{
//    @Override
//    public void show() {
//        System.out.println("这是子类的show方法");
//    }
}
public class FinalDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

final修饰局部变量:

  1. 修饰基本数据类型的变量,变量值智能赋值一次,不能发生改变
  2. final修饰引用数据类型的变量,引用的地址值不可以发生改变,但是该对象的堆内存中的值是可以改变的
//final修饰引用数据类型的变量,引用的地址值不可以发生改变,但是该对象的堆内存中的值是可以改变的
class Student {
    int age = 10;
}

public class FinalDemo2 {
    public static void main(String[] args) {
        int x = 100;
        x = 300;
        System.out.println(x);
        final int y = 200;
        System.out.println(y);
//        y = 100;  已经被final修饰,不能再继续赋值更改变量
        Student student = new Student();
        System.out.println(student.age);
        final Student s2 = new Student();
        System.out.println(s2.age);
        s2.age = 1000;
        System.out.println(s2.age);

//        s2 = new Student(); //无法为最终变量s2分配值
    }
}

方法的重写的注意事项

  1. 父类中私有的方法不能被重写
  2. 子类重写父类的方法时候,要么子类重写父类的方法访问权限比父类更高或平级
  3. 父类中静态方法不能被重写,即不能被Override修饰,因为静态的是属于类本身的东西

面试题:

  1. 方法重写和方法重载的区别

    overload:重载
    
    		重载只发生在同一个类中,出现的方法名一致,参数列表不一致的现象
    
    override:重写
    
    		重写发生在继承关系中的子类中,出现和父类中方法声明一样的方法,实现的功能不一样
    
  2. this关键字和super关键字代表什么?以及他们各自的使用场景和作用

this:代表当前类对象的引用

super:代表父类存储空间的标识


成员变量:

			super.父类的成员变量
 
			this.本类中的成员变量

构造方法:

			super(...)
 
			this(...)

成员方法:

			super.父类中的成员方法()
	
			this.本类的成员方法()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值