final 值可以修改吗_final,接口

【1】final修饰变量:

a9b38776f31895f7bd7571cdea9a06d8.png
public class Test {
    public static void main(String[] args) {
        //1......
        final int A=10;//基本数据类型被final修饰,它的数值不可以被修改。
        // A=20;
        System.out.println(A);
        //当一个变量被final修饰,它就变成了一个常量,它的值不可以再被修改。
        //建议名字全部大写
        //2......
        final Dog d=new Dog();//引用数据类型被final修饰,它的地址值不可以被修改。
        d.age=10;
        d.age=20;
        //d=new Dog();--->不可以
        //3.......
        final Dog d2=new Dog();
        a(d2);//可以
        //4.....
        final Dog d3=new Dog();
        b(d3);
        Dog d4=new Dog();
        b(d4);
    }
    public static void a(Dog d){
        d=new Dog();//可以
    }
    public static void b(final Dog d){
       // d=new Dog(); 不可以
    }
}

【2】final修饰类:如果一个类被final修饰,那么这个类就不可以被继承。

166b28188367baeb906690402980bb86.png

【3】final修饰方法:

(1)如果一个方法被final修饰,那么子类不可以重写这个方法

(2)虽然子类不能重写了,但是调用都是可以的!

【4】查看源码:Math类:

(1)final修饰属性:这个值不让其他人更改

(2)final修饰方法:不能被重写

(3)final修饰类:不能被继承

(4)发现Math中的构造器被private修饰了:

14c376d7752f8a22255f39178715ebbc.png

所以Math m=new Math();这个话 出错!

那么我们想要调用里面的属性和方法怎么调用:

发现所有的属性和方法前都加了static修饰:我可以通过类名。属性名或者类名。方法名去调用。

【1】为什么需要抽象类? 如何定义抽象类?

是一种模版模式。

抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展。

通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

 package com.bjsxt.test03;
//3.只要类中有抽象方法,这个类就变成一个抽象类。
//4.那么抽象类中可以有0,1,2,,,,,n个抽象方法,
public abstract class Person {
    //1.在一个类中,有一部分方法,子类对他永远满意,直接用,不用重写
    public void eat(){
        System.out.println("吃食物");
    }
    //2.在一个类中,还有一部分方法,无论怎么写子类都不满意,都要对它进行重写。
    //2.对于这样的方法,方法体就没有必要再写了
    //2.假如一个方法没有方法体,只有方法的声明,那么这个方法就变成了一个抽象方法
    public abstract void say();
    public abstract  void sleep();
}
//5.抽象类可以被继承吗?可以的,必须重写全部的抽象方法。
//6.假如子类没有重写全部的抽象方法,那么这个类也可以变为一个抽象类。
class Student extends Person{
    @Override
    public void say() {
        System.out.println("说普通话。。");
    }
    @Override
    public void sleep() {
    }
}
class Test{
    public static void main(String[] args) {
        //7.可否创建抽象类的对象:抽象类不可以创建对象。
        //Person p=new Person();
        Student s=new Student();
        s.eat();
        s.say();
        s.sleep();
        //8.就想创建抽象类的对象:
        Person p=new Student();//多态
    }
}

【2】面试题:

(1)抽象类不能创建对象,那么抽象类中是否有构造器?

必须有构造器,因为这个构造器不是给抽象类用的,而是给子类创建对象的时候调用的。

(2)抽象类可否被final修饰?

不可以的

final修饰不能被子类继承,但是抽象类就是给子类定义模板的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值