Java基础知识(十三)(面向对象--4)

1、 方法重写的注意事项:
      (1)父类中私有的方法不能被重写
      (2)子类重写父类的方法时候,访问权限不能更低
           要么子类重写的方法访问权限比父类的访问权限要高或者一样
           建议:以后子类重写父类的方法的时候,权限修饰符写一样就不会发生这样的问题。
     (3)父类中静态的方法不能被重写,也就是说不能被Override修饰,因为静态的是属于类本身的           东西。

class OldPhone {
    private String name;

    public void call(String name) {
        System.out.println("打电话给" + name);
    }
    public static void play(){
        System.out.println("玩俄罗斯方块");
    }
}

class NewPhone extends OldPhone {
    @Override
    public void call(String name) {
//        super.call(name);
        System.out.println("看抖音");
    }

//    @Override
    public static void play(){
        System.out.println("玩王者荣耀");
    }

}


public class ExtendsDemo1 {
    public static void main(String[] args) {
        NewPhone newPhone = new NewPhone();
        newPhone.call("阿杰");
    }
}

2、父类的静态成员

class A{
    //将父类中的静态成员看作一个全局共享的,被所有的子类共享
    public static int a = 10;

    public static void fun(){
        System.out.println("hello");
    }
}

class B extends A{
    public void fun2(){
        a = 200;
        System.out.println(a);
    }

    public static void fun(){
        System.out.println("world");
    }
}


public class ExtendsDemo2 {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.a);
        b.fun();
        b.fun2();
        System.out.println(b.a);
        System.out.println(A.a);

    }
}

  3、有些时候,我们不想让子类覆盖重写父类中的方法或者功能,只能让子类去使用。
        那怎么办呢?
        针对这个情况,java提供了一个关键字:final

        final:最终的意思。可以修饰类,成员变量,成员方法。

class Fu{
    public final void show(){
        System.out.println("这是父类中的show方法");
    }
}

class Zi extends Fu{
//    @Override
//    public void show(){
//        System.out.println("这是子类中的show方法");
//    }

}

public class ZiDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

4、 final的特点:
       (1)修饰类,类不能被继承
       (2)修饰成员变量,变量变常量,并且只能赋值一次,在构造方法完毕之前赋值即可。
                常量:
                    字面值常量
                    自定义常量:被final修饰变量变成自定义常量
       (3)final修饰成员方法:方法不能被重写

//无法从最终com.shujia.wyh.day11.Fu2进行继承
//final class Fu2{}

class Fu2{
    int num = 10;

//    final int num2 = 200;
    final int num2;
//    {
//        num2 = 400;
//    }

    Fu2(){
        num2 = 400;
    }

}

class Zi2 extends Fu2{
    public void show(){
        num = 100;
        System.out.println(num);
//        num2 = 300; //无法为最终变量num2分配值
        System.out.println(num2);
    }
}

public class FinalDemo {
    public static void main(String[] args) {
        Zi2 zi2 = new Zi2();
        zi2.show();

    }
}

5、面试题:
            final修饰局部变量

           (1)在方法内部,修饰基本数据类型的变量,变量值只能赋值一次,不能发生改变
           (2)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;
//        y = 400; //无法为最终变量y分配值
        System.out.println(y);
        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);
        System.out.println("==========================");
//        s2 = new Student(); //无法为最终变量s2分配值
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值