多态特征,instanceof关键字和abstract类
多态
对象有多种状态。作用:提高程序的可扩展性。
一个对象具备多种状态的能力,这个程序是可扩展的。
前提:
必须有层级关系 继承 实现
继承:子类和父类的关系,一个父类可以有多个子类,说明父类的引用有多种形态
作用类型: 形参、返回值、创建对象
可以将子类的方法重载,也可以直接将方法的形式参数类型改成父类的对象,子类对象向上转型为父类的引用,可以把它理解为类型隐式转换,由低到高。
在多态情况下,无法直接获得子类独有的成员,需要进行强制转换,向下转换为子类的类型,由高到低:
PM pm=(PM)employee;
但是假如方法里面还有其他子类的方法,需要使用instance判断employee对象是否某子类型的
instanceof
判断一个引用是否是一个类的实例
employee instanceof PM
判断employee对象否是PM类型
如果说子类有很多私有属性需要访问,可以使用方法重载来替换
抽象类abstract
每个子类都选择重写该方法,那么说明父类中该方法没有逻辑意义,就可以将该方法变成一个没有方法体的方法,变为抽象方法,且抽象方法在的类为抽象类,因此父类中也需要加上abstract
@Setter
@Getter
public abstract class Pets {
public abstract void fun();
}
抽象类一般出现在继承里面,且作为父类存在,且父类的抽象方法需要在每个子类中重写,抽象类中可以没有抽象方法,但是抽象方法中一定要有抽象类
@Setter
@Getter
public class JiXiangCat extends Pets {
private String name;
@Override
public void fun(){
}
}
抽象类中的属性和方法与普通类一样,但是会存在一个抽象方法,对于抽象方法可以与哪些修饰符一起使用?
public, protected, 默认, 不能加static修饰符
虽然有构造,抽象类不能直接创建对象,抽象类是服务于子类对象创造的,服务多态
使用抽象类创建匿名内部类,需要在创建的对象后面加上抽象方法的重写
public static void main(String[] args) {
Pets pets=new Pets() {
@Override
public void fun() {
}
};//创建匿名内部类对象
}
此时等同于创建了一个子类匿名的内部类对象,且对象类型是pets,如果需要向下调用子类独有的方法和属性,需要将改匿名内部类对象转化成子类型的对象:
JiXiangCat jiXiangCat=(JiXiangCat)pets;
多态特征,instanceof关键字和abstract类的更多相关文章
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则
/** * 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类 * 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类 * 2.非抽象类继承抽象类必须实现抽象方法[可以是空实现] * 3.抽象 ...
- Java之Object类与instanceof关键字
Object类是所有类的父类: 我们上下代码: package com.learn.chap03.sec14; public class A { // 上面类A继承了Object类,因此又可这样定义: ...
- instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。
http://lavasoft.blog.51cto.com/62575/79864/ 深入Java关键字instanceof 2008-06-02 07:50:43 标签:Java 关键字 休 ...
- 多态(instanceof)
多态调用的三种格式 * A:多态的定义格式: * 就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 变量名.方法名(); * B: 普通类多态定义的格式 父类 变量名 = ...
- java基础9 main函数、this、static、super、final、instanceof 关键字
一.main函数详解 1.public:公共的.权限是最大的,在任何情况都可以访问 原因:为了保证jvm在任何情况下都可以访问到main法2.static:静态,静态可以让jvm调用更方便,不需要用 ...
- Java面向对象_多态性、instanceof关键字
一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例 格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例 格式:子类 子类对 ...
- JAVA_SE基础——41.instanceof关键字(运算符)
instanceof 关键字 instanceof关键字的作用:判断一个对象是否属于指定的类别. instanceof关键字的使用前提:判断的对象与指定的类别必须要存在继承或者实现的关系.关于实现以后 ...
- C# 多态与new关键字
1. 你通常怎样用多态? 假设我有一个类,里面有一个 PrintStatus 方法,用于打印实例的当前状态,我希望该类的派生类都带有一个 PrintStatus 方法,并且这些方法都用于打印其实例的当 ...
随机推荐
- Camera类定义和实现
类声明: #pragma once #ifndef __CAMERA_HEADER__ #define __CAMERA_HEADER__ #include "../utilities/ge ...
- .NET 扩展 官方 Logger 实现将日志保存到本地文件
.NET 项目默认情况下 日志是使用的 ILogger 接口,默认提供一下四种日志记录程序: 控制台 调试 EventSource EventLog 这四种记录程序都是默认包含在 .NET 运行时库中 ...
- Find-Vulnerability 自动化探测扫描工具简介
Fvuln 简介 F-vuln(全称:Find-Vulnerability)是一款自动化探测扫描工具,主要适用于日常安全服务.渗透测试人员和RedTeam红队人员使用 它集合的功能包括: 存活IP探测 ...
- 【JAVA】学习路径35-InputStream使用例子
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; pu ...
- java基础学习:java中的反射
一.什么是java反射 什么是 java 的反射? 说到反射,写这篇文章时,我突然想到了人的"反省",反省是什么?吾一日三省吾身,一般就是反思自身,今天做了哪些对或错的事情. ja ...
- KingbaseES 绑定变量与游标共享
对于重复执行的SQL,需要使用绑定变量,避免SQL的重复解析.但是,并不是说使用了绑定变量,就一定能避免硬解析.具体可以参见:https://www.cnblogs.com/kingbase/p/16 ...
- 日志:Redo Log 和 Undo Log
本篇文章主要介绍 Redo Log 和 Undo Log: 利用 Redo Log 和 Undo Log 实现本地事务的原子性.持久性 Redo Log 的写回策略 Redo Log Buffer 的 ...
- 论文解读(RvNN)《Rumor Detection on Twitter with Tree-structured Recursive Neural Networks》
论文信息 论文标题:Rumor Detection on Twitter with Tree-structured Recursive Neural Networks论文作者:Jing Ma, Wei ...
- C# 中的那些锁,在内核态都是怎么保证同步的?
一:背景 1. 讲故事 其实这个问题是前段时间有位朋友咨询我的,由于问题说的比较泛,不便作答,但想想梳理一下还是能回答一些的,这篇就来聊一聊下面这几个锁. Interlocked AutoResetE ...
- 【C++】GoogleTest入门指南
参考: GoogleTest官网 基本概念 要使用GoogleTest,需要包含header gtest/gtest.h 断言Assertions 断言是检查条件是否为真的语句,其结果可能是成功或失败 ...