JAVA 学习模块十二: Final 关键字 以及 继承(下)

这里写图片描述

1. Final 的作用

/*
继承的缺点: 打破了封装性

final 关键字:
1.final是一个修饰符,可以修饰类、方法、变量。
2.final 修饰的类不可被继承。
3.final 修饰的方法不可以被覆盖
4.final修饰的变量是一个常量,只能赋值一次。



为什么要用 final 修饰变量,其实如果一个数据在程序里是固定的,那么直接使用这个数据就可以了,但是这样阅读行差。所以给该数据起个名称。
而且这个变量名称的值不能变化,所以加上 final 固定。

写法规范: 常量所有字母都大写,多个单词中间用下划线—— 连接。



*/
 class Fu1
 {
    void method()
     {
        static final int AGE = 9;
        System.out.println(age);
    }


 }

 class Zi extends Fu
 {

     Zi()
     {
        System.out.println("show run");
    }
 }

 class ExtendsDemo4
 {

     public static void main(String[] args)
     {
        Fu1 f = new Fu1();
        f.method();

     }
 }


2.继承下: 抽象类(abstract)


/*
抽象类:

特点;
1。方法只有声明没有实现时,该方法就是抽象方法,需要被abstract 修饰。
    抽象方法必须定义在抽象类中。该类必须也被 abstract 修饰
2. 抽象类不可以被实例化:因为调用抽象方法没意义
3.抽象类必须由其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则这个子类还是抽象类。



*/
 abstract class quanke
 {
    abstract void jiao(); //不明显的特征 抽象


 }


class dog extends quanke
{

    void houjiao()
    {
    System.out.println("wang")
    }
}



class lang extends quanke
{

    void houjiao()
    {
    System.out.println("ao")
    }
}

3.抽象类的五个问题

1.抽象类中有构造函数吗?
答:有。 因为用于给子类对象初始化

2.抽象类可不可以不定义抽象方法?
答: 可以。 因为但是很少见。目的就是不让该类创建对象 AWT 的适配器对象就是这种类。
通常这个类中的方法有方法体,但是却没有内容。

3.抽象关键字不可以和哪些关键字共存?
答:private ,抽象方法要被覆盖,私有方法不能被覆盖。
static ,
final ,不可被覆盖了

4。抽象类和一般类的区别
答:相同点:都是描述事物的,都在内部定义了成员
不同点: 1.一般类有足够的信息描述事物,抽象类描述事物信息不足
2.一般类中不能定义抽象方法,抽象类中可定义抽象方法,同时也可以定义非抽象
3.一般类可以被实例化,抽象类不可以

5.抽象类一定是父类?

答: 是。因为子类需要覆盖其方法后才能实例化。

4.抽象类练习


/*
抽象类练习:
雇员实例:
需求:公司中程序有姓名,工号,薪水,工作内容。
项目经理除了姓名,工号,薪水还有奖金,工作内容
对给出的需求进行数据建模

分析:
在这个问题领域中先找出对象,用名词提炼法:程序员 ,经理
程序员属性: 姓名,工号,薪水
        行为:工作
经理属性: 姓名,工号,薪水,奖金
        行为: 工作

程序员和经理不存在着直接继承关系,但是程序员和经理存在着共性内容,可以进行抽取。



*/

class Employee
{
    private String name;
    private String id;
    private double pay;
    Employee(String name, String id ,double pay)
    {
        this.name =name;
        this.id = id;
        this.pay= pay;
    }

    public abstract void work()
    {


    }

}


class Program extends Employee
{
    Program(String name, String id ,double pay)
    {
        super(name,id,pay);
    }

    public void work()
    {
        System.out.println("code");
    }

}

class manager extends Employee

{   private int bonus;
    manager(String name, String id ,double pay,int bonus)
    {
        super(name,id,pay);
        this.bonus = bonus;
    }
    public void work()
    {
        System.out.println("manager");

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值