Java面向对象--接口和多态

打印 上一主题 下一主题

主题 792|帖子 792|积分 2376

final 关键字

最终修饰符 可以修饰 类 方法 变量
被final修饰后不能被继承 重写 二次赋值
修饰类时 该类不可以被继承
修饰方法时 该方法不能被重写
修饰变量时, 该变量只能赋值一次, 不可以二次赋值 是常量
修饰引用变量时, 地址值不能改变 但对象中的属性值可以改变
修饰成员变量时, 必须在类中显性赋值 或 在所有构造方法中对其赋值
接口

接口是功能的集合 描述的是功能 接口中都是抽象方法(JDK1.8之前)
定义格式
  1. public interface 接口名{
  2.         抽象方法;
  3. }
复制代码
接口的使用

1.接口不能创建对象
2.使用类实现接口
3.重写抽象方法
4.创建实现类对象 调用方法
实现的动作类似继承 就是关键字不同
  1. public class 类  implements 接口{
  2.         重写方法
  3. }
复制代码
接口的成员特点

接口没有构造方法
接口中的成员变量 被public static final修饰 是常量
接口中的成员方法 被public abstract修饰
接口的特点

类与类 单继承
类与接口 多实现
接口与接口 多继承
类可以在继承一个类的同时 实现多个接口
接口与抽象类的区别
  1. 成员区别
  2.         构造方法
  3.                 接口没有构造方法
  4.                 抽象类有构造方法 给子类使用
  5.         成员变量
  6.                 接口没有变量 只有常量
  7.                 抽象类既可以有变量 也可以有常量
  8.         成员方法
  9.                 接口中的方法都是抽象的
  10.                 抽象类中 既可以有抽象方法 也可以有具体的方法
  11.         思想的区别
  12.                 抽象类描述的是一类事物的共性内容
  13.                 接口描述的是功能
复制代码
多态

多态的前提

1.继承或者是实现关系
2.需要有方法重写
多态的格式

父类引用指向子类对象
  1. 具体类  变量 = new 子类对象();
  2. 抽象类  变量 = new 子类对象();
  3. 接口  变量 = new 实现类对象();
复制代码
多态后访问的成员特点
  1. 成员变量
  2.         编译时 到父类中找 如果有编译通过 没有报错
  3.         运行时  打印的父类成员变量的值
  4.         编译时  看左边
  5.         运行时  看左边
  6. 成员方法
  7.         编译时 到父类中找 如果有编译通过 没有报错
  8.         运行时  子类重写后的方法
  9.         编译时 看左边
  10.         运行时 看右边
  11. 多态后 一切都是父类的表现形式 只有方法运行的子类重写后的方法.
复制代码
向上转型和向下转型
  1. // 向上转型
  2. // 多态本身就是向上转型
  3. Fu fz = new Zi();
  4. // 向下转型
  5. // 向上转型后 不能访问子类特有功能
  6. // 要想访问 需要向下转型
  7. Zi zf = (Zi)fz;
  8. // 需要注意
  9. Fu fu = new fu();
  10. Zi  zi = (Zi)fu; //抛运行时异常  ClassCastException 类型转换异常
复制代码
instanceof关键字

判断某个对象是否属于某种类型 是返回true, 否返回false
  1. boolean b = 对象 instanceof 类型;
  2. if(对象 instanceof 类型){}
复制代码
练习
  1. 员工类
  2.         属性
  3.                 id
  4.                 name
  5.                 基本工资
  6.         行为
  7.                 计算工资  抽象
  8. 经理类
  9.         属性
  10.                 id
  11.                 name
  12.                 基本工资
  13.                 管理工资
  14.         行为
  15.                 计算工资  基本工资+管理工资
  16. 程序员
  17.         属性
  18.                 id
  19.                 name
  20.                 基本工资
  21.                 项目奖金
  22.         行为
  23.                 计算工资  基本工资+项目奖金
  24. 公司类
  25.         行为
  26.                 查看员工工资(员工){
  27.                         员工的工号:38250
  28.                         员工的姓名:柳岩
  29.                         员工的职位:经理
  30.                         员工的工资:11111.00
  31.                 }
复制代码
练习
  1. // Employee.java
  2. public abstract class Employee {
  3.     String id;
  4.     String name;
  5.     private double salary;
  6.     public Employee() {
  7.     }
  8.     public Employee(String id, String name, double salary) {
  9.         this.id = id;
  10.         this.name = name;
  11.         this.salary = salary;
  12.     }
  13.     public abstract double calculateSalary();
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public double getSalary(){
  18.         return salary;
  19.     }
  20. }
复制代码
  1. // Manager.java
  2. public class Manager extends Employee{
  3.     private double additionalSalary;
  4.     public Manager() {
  5.     }
  6.     public Manager(String id, String name, double salary, double additionalSalary) {
  7.         super(id, name, salary);
  8.         this.additionalSalary = additionalSalary;
  9.     }
  10.     public double getAdditionalSalary() {
  11.         return additionalSalary;
  12.     }
  13.     public void setAdditionalSalary(double additionalSalary) {
  14.         this.additionalSalary = additionalSalary;
  15.     }
  16.     @Override
  17.     public double calculateSalary() {
  18.         return super.getSalary() + getAdditionalSalary();
  19.     }
  20. }
复制代码
  1. // Programmer.java
  2. public class Programmer extends Employee{
  3.     private double projectSalary;
  4.     public double getProjectSalary() {
  5.         return projectSalary;
  6.     }
  7.     public Programmer() {
  8.     }
  9.     public Programmer(String id, String name, double salary, double projectSalary) {
  10.         super(id, name, salary);
  11.         this.projectSalary = projectSalary;
  12.     }
  13.     public void setProjectSalary(double projectSalary) {
  14.         this.projectSalary = projectSalary;
  15.     }
  16.     @Override
  17.     public double calculateSalary() {
  18.         return super.getSalary() + getProjectSalary();
  19.     }
  20. }
复制代码
  1. // Company.java
  2. public class Company {
  3.     public void lookEmployeeSalary(Employee employee) {
  4.         String position = "员工";
  5.         if (employee instanceof Manager) {
  6.             position = "经理";
  7.         } else if (employee instanceof Programmer){
  8.             position = "程序员";
  9.         }
  10.         System.out.println("员工的工号: " + employee.id);
  11.         System.out.println("员工的姓名: " + employee.name);
  12.         System.out.println("员工的职位: " + position);
  13.         System.out.println("员工的工资: " + employee.calculateSalary());
  14.     }
  15. }
复制代码
  1. public class Demo {
  2.     public static void main(String[] args) {
  3.         Company company = new Company();
  4.         company.lookEmployeeSalary(new Manager("001", "经理一号",20000, 3000));
  5.         System.out.println("============================");
  6.         company.lookEmployeeSalary(new Programmer("002", "程序员一号",20000, 3000));
  7.     }
  8. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表