final 关键字

最终修饰符 可以修饰 类 方法 变量

被final修饰后不能被继承 重写 二次赋值

修饰类时 该类不可以被继承

修饰方法时 该方法不能被重写

修饰变量时, 该变量只能赋值一次, 不可以二次赋值 是常量

修饰引用变量时, 地址值不能改变 但对象中的属性值可以改变

修饰成员变量时, 必须在类中显性赋值 或 在所有构造方法中对其赋值

接口

接口是功能的集合 描述的是功能 接口中都是抽象方法(JDK1.8之前)

定义格式

public interface 接口名{
抽象方法;
}

接口的使用

1.接口不能创建对象

2.使用类实现接口

3.重写抽象方法

4.创建实现类对象 调用方法

实现的动作类似继承 就是关键字不同

public class 类  implements 接口{
重写方法
}

接口的成员特点

接口没有构造方法

接口中的成员变量 被public static final修饰 是常量

接口中的成员方法 被public abstract修饰

接口的特点

类与类 单继承

类与接口 多实现

接口与接口 多继承

类可以在继承一个类的同时 实现多个接口

接口与抽象类的区别

成员区别
构造方法
接口没有构造方法
抽象类有构造方法 给子类使用
成员变量
接口没有变量 只有常量
抽象类既可以有变量 也可以有常量
成员方法
接口中的方法都是抽象的
抽象类中 既可以有抽象方法 也可以有具体的方法
思想的区别
抽象类描述的是一类事物的共性内容
接口描述的是功能

多态

多态的前提

1.继承或者是实现关系

2.需要有方法重写

多态的格式

父类引用指向子类对象

具体类  变量 = new 子类对象();
抽象类 变量 = new 子类对象();
接口 变量 = new 实现类对象();

多态后访问的成员特点

成员变量
编译时 到父类中找 如果有编译通过 没有报错
运行时 打印的父类成员变量的值
编译时 看左边
运行时 看左边
成员方法
编译时 到父类中找 如果有编译通过 没有报错
运行时 子类重写后的方法
编译时 看左边
运行时 看右边
多态后 一切都是父类的表现形式 只有方法运行的子类重写后的方法.

向上转型和向下转型

// 向上转型
// 多态本身就是向上转型
Fu fz = new Zi();
// 向下转型
// 向上转型后 不能访问子类特有功能
// 要想访问 需要向下转型
Zi zf = (Zi)fz; // 需要注意
Fu fu = new fu();
Zi zi = (Zi)fu; //抛运行时异常 ClassCastException 类型转换异常

instanceof关键字

判断某个对象是否属于某种类型 是返回true, 否返回false

boolean b = 对象 instanceof 类型;
if(对象 instanceof 类型){}

练习

员工类
属性
id
name
基本工资
行为
计算工资 抽象 经理类
属性
id
name
基本工资
管理工资
行为
计算工资 基本工资+管理工资
程序员
属性
id
name
基本工资
项目奖金
行为
计算工资 基本工资+项目奖金 公司类
行为
查看员工工资(员工){
员工的工号:38250
员工的姓名:柳岩
员工的职位:经理
员工的工资:11111.00
}
练习
// Employee.java
public abstract class Employee {
String id;
String name;
private double salary; public Employee() {
} public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
} public abstract double calculateSalary(); public String getName() {
return name;
} public double getSalary(){
return salary;
}
}
// Manager.java
public class Manager extends Employee{
private double additionalSalary; public Manager() {
} public Manager(String id, String name, double salary, double additionalSalary) {
super(id, name, salary);
this.additionalSalary = additionalSalary;
} public double getAdditionalSalary() {
return additionalSalary;
} public void setAdditionalSalary(double additionalSalary) {
this.additionalSalary = additionalSalary;
} @Override
public double calculateSalary() {
return super.getSalary() + getAdditionalSalary();
}
}
// Programmer.java
public class Programmer extends Employee{
private double projectSalary; public double getProjectSalary() {
return projectSalary;
} public Programmer() {
} public Programmer(String id, String name, double salary, double projectSalary) {
super(id, name, salary);
this.projectSalary = projectSalary;
} public void setProjectSalary(double projectSalary) {
this.projectSalary = projectSalary;
} @Override
public double calculateSalary() {
return super.getSalary() + getProjectSalary();
}
}
// Company.java
public class Company {
public void lookEmployeeSalary(Employee employee) {
String position = "员工";
if (employee instanceof Manager) {
position = "经理";
} else if (employee instanceof Programmer){
position = "程序员";
}
System.out.println("员工的工号: " + employee.id);
System.out.println("员工的姓名: " + employee.name);
System.out.println("员工的职位: " + position);
System.out.println("员工的工资: " + employee.calculateSalary());
}
}
public class Demo {
public static void main(String[] args) {
Company company = new Company();
company.lookEmployeeSalary(new Manager("001", "经理一号",20000, 3000));
System.out.println("============================");
company.lookEmployeeSalary(new Programmer("002", "程序员一号",20000, 3000)); }
}

Java面向对象--接口和多态的更多相关文章

  1. Java 基础 接口和多态

    接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...

  2. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  3. Java学习笔记:03面向对象-接口_多态

    1.类的概念 一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合 2.接口的概念 接口是功能的集合,就是方法的集合 接口中只能定义方法,不能定义普通的成员变量 而且接口中的成员方法,必须是抽象 ...

  4. Java面向对象㈡ -- 继承与多态

    Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...

  5. java面向对象--继承与多态

    可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...

  6. JAVA面向对象-----接口的概述

    接口的概述 **接口(interface):**usb接口,主要是使用来拓展笔记本的功能,那么在java中的接口主要是使用来拓展定义类的功能,可以弥补java中单继承的缺点. class Pencil ...

  7. Java面向对象---接口

    接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口 ...

  8. java 3 接口与多态&输入输出流

    接口 中的所有方法都是方法 抽象 使用接口实现多继承 类型的装换 数据成员就变成了static 和 final food 和 snow 都是可以吃的 可以同时实现多个接口 接口与接口之间也可以有继承关 ...

  9. Java面向对象----接口概念

    接口语法 interface 接口名{ //静态常量,抽象方法 } 特点 接口中只能存放静态常量和抽象方法 java接口是对功能的扩展 通过实现接口,java类可以实现多实现 一个类可以同时继承(ex ...

  10. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

随机推荐

  1. uniapp 报错 签名不对 请检查签名是否与开放平台上填写的一致

    问题描述 用签名工具 输入包名   获取签名 在微信开放平台申请app 用获取的签名申请 申请成功后  在hbuilderx上云打包apk 分享 报  签名不对  请检查签名是否与开放平台上填写的一致 ...

  2. Context,多个组件公用的数据传导方法

    三个组件:输入A组件 输出B组件 TestContext组件,数据x. 方法: 输入端(A):     import TestContext from "TestContext组件路径&qu ...

  3. 解决Z490-A吹雪安装macOS Monterey随机重启

    1.目前发现随机重启问题是板载网卡I225-v导致,需要去除以往的网卡的kext补丁: 2.去除补丁后发现网络连接识别成功,但是无法上网:这是因为网卡ID注入错误.需要将网卡ID设置为:F315868 ...

  4. day01学习小记

    # Markdown学习 ## 标题 ### 三级标题 #### 四级标题 ## 字体 Hellow,World! Hellow,world hellow,world! hellow,world ## ...

  5. 【omr】linux配置omr识别项目moonlight环境

    最近又做了第n次moonlight的环境配置 moonlight是相对成熟的omr系统 这里记录环境配置的基本步骤 (总的来说主要是用conda新建符合程序要求的python版本 然后装好bazel和 ...

  6. [Leetcode 111]二叉树的最短深度 BFS/DFS

    题目 给定二叉树,求最短路径包含的节点个数 https://leetcode.com/problems/minimum-depth-of-binary-tree/ Given a binary tre ...

  7. 关于TIdTCPClient的几种方法

    关于TIdTCPClient的几种方法 收藏  其实Indy比较简单,但是可以提供的方法太多了.我找了很久,才搞明白. 比方说这个读取缓冲区的数据,就有很多种方法.相对于TTcpClient的几种方法 ...

  8. SpringSecurity登录验证,多个用户表

    在开始之前我想感叹一句,技术久了不回头看看真的会忘记的,这次公司让我重新开发一个程序,项目架构为单体多模块开发,其中有个需求就是需要不同用户表进行登录,且不同表的用户名.手机号都可以重复. 这样的需求 ...

  9. Matlab:读取、写入(.txt)(.xlsx)

    写入txt a=[1,2,3;4,5,6]; save C:\Users\Administrator\Desktop\a.txt -ascii a 参考:https://blog.csdn.net/h ...

  10. [Unity移动端]真机调试

    一.Android Studio 1.log打印 打开AS,新建一个工程,点击左下角的Logcat,如下图,1是设备(支持模拟器,如果是真机的话,需要usb连接电脑,真机要是usb调试模式),2是包名 ...