/**
* 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类
* 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类
* 2.非抽象类继承抽象类必须实现抽象方法【可以是空实现】
* 3.抽象类可以有方法和属性
* 4.抽象类不能被实例化
* 5.抽象类不能声明为final
* 6.抽象类可以有构造方法【不代表实例化对象】
*/
public class Main {
public static void main(String[] args) {
Goddess m1 = new Goddess();
m1.setName("dining");
m1.say(); Ugly m2 = new Ugly();
m2.setName("fish");;
m2.say();
}
} abstract class Woman{ //Woman为抽象类
private String name;
public Woman(){
System.out.println("我是抽象类的构造方法。");
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public abstract void say(); //抽象方法(只有声明,没有实现)
} class Goddess extends Woman{
//实现父类的抽象方法
public void say(){
System.out.println("我是女神,我的名字是:"+getName());
}
}
class Ugly extends Woman{
public void say(){
System.out.println("我是丑女,我的名字是:"+getName());
}
}
/**
* 接口:一组行为的规范、定义,没有实现
* 接口定义格式:
* interface 接口名称{
* 全局常量;
* 抽象方法;
* }
* 1.一个类可以实现多个接口
* 2.抽象类实现接口可以不实现方法
* 3.接口中所有方法的访问权限都必须是public
* 4.接口中定义的属性都是常量
*/ //定义一个接口
interface Hit{
public static final String NAME = "d"; //在接口中定义的属性都是常量 public static final都可以省略
public void cry(); //抽象方法 public abstract(可以省略)
}
interface IEat{
public void eat();
} class goddess implements Hit,IEat{
//实现接口必须实现接口中的所有方法
public void cry(){
System.out.println("疼死我了~");
}
public void eat(){
System.out.println("一小口一小口吃~");
}
}
class girl implements Hit{
public void cry(){
System.out.println("你妹啊!疼死老娘了~");
}
}
abstract class Person implements Hit{ }
public class Main {
public static void main(String[] args) {
//父类就是大,子类就是小【向上转型:父类的引用指向子类对象】
Person s1 = new man();
s1.say(); //如果Person类中没有say方法则不能调用
s1.talk(); //调用的是man类中的talk方法,而不是Person类中的talk方法,如果man类中没有talk方法,则调用Person类中的talk方法
Person s2 = new woman();
s2.say(); //【向下转型:将父类实例转为子类实例(强制转换)】
man w1 = (man)s1;
w1.say();
//man w2 = (man)s2; 不能这样转
}
} /**
* 多态性:1.方法的重载与重写 2.对象的多态性
*/ abstract class Person{
String name;
abstract public void say();
public void talk(){
System.out.println("hi I'm a person.");
}
} class man extends Person{
public void say(){
System.out.println("I'm a man.");
}
public void talk(){
System.out.println("hi I'm a man.");
}
}
class woman extends Person{
public void say(){
System.out.println("I'm a woman.");
}
}
/**
* Instanceof关键字:用于判断某一个对象是否为某个类的实例,返回布尔值
*/
public class Main {
public static void main(String[] args) {
Man m1 = new Man();
say(m1);
Woman m2 = new Woman();
say(m2);
}
public static void say(Person p){
p.say();
if(p instanceof Woman){
Woman w = (Woman)p;
w.getangry();
}
}
} class Person{
public void say(){
System.out.println("I'm a person.");
}
}
class Man extends Person{
public void say(){
System.out.println("I'm a man.");
}
}
class Woman extends Person{
public void say(){
System.out.println("I'm a woman.");
}
public void getangry(){
System.out.println("I'm angrying...");
}
} /**
* 父类设计法则
* 能过instanceof关键字,我们可以方便地检查对象类型,但如果一个父类的子类过多,这样的判断还是显得很繁琐
* 如何设计父类?
* 1.父类通常情况下都设计为抽象类或接口,其中优先考虑接口,如果接口不能满足才考虑抽象类
* 2.一个具体的类尽可能不去继承另一个具体类,这样的好处是无需检查对象是否为父类的对象
*/
/**
* 抽象类应用(灵鹫宫招聘)
* 模板方法模式:定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中。
* 模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤
*/
public class Main {
public static void main(String[] args) {
LinJiuGong lp = new Shemale("fish7");
lp.action();
}
} abstract class LinJiuGong{
public void action(){ //招聘活动
if(competition()){
System.out.println("Congratulations, welcome to LinJiuGong !");
}else{
System.out.println("Sorry.....");
}
}
public abstract boolean competition(); //抽象方法
}
class Shemale extends LinJiuGong{
private String name;
Shemale(String name){
this.name = name;
}
public boolean competition(){ //实现比赛方法
System.out.println("Game start....I'm gonna win !");
Random r = new Random();
return r.nextBoolean();
}
}

JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则的更多相关文章

  1. Java中的Serializable接口和transient关键字

    Java中的Serializable接口和transient关键字 Table of Contents 1. 向memcached中放数据时遇到NotSerializableException异常 2 ...

  2. Java学习笔记 抽象类 接口 多态

    instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...

  3. java的方法重写 ,多态和关键字 instanceof和final

    package cn.pen; /*final 是一个java的关键字,用于修饰局部变量.属性.方法.类,表示最终的意思. final修饰类表示最终类,无法被继承.public final class ...

  4. Java笔记:抽象类、接口

    这篇笔记主要是抽象类和接口,还有简单介绍下三种设计模式:模板模式.工厂模式.命令模式 1.抽象方法和抽象类(1)抽象方法和抽象类都必须使用abstract修饰符来定义,包含抽象方法的类只能被定义成抽象 ...

  5. Java笔记8-抽象接口

    高级特性部分: 抽象(abstract) 接口(interface) 提纲: 抽象类的定义和使用 模板设计模式的使用 接口的定义和使用 回调函数 区别抽象类和接口的异同 软件设计原则--------- ...

  6. 接口&&多态&&构造函数&&关键字

    day06 抽象类的局限性(与接口的区别) 抽象类可以定义非抽象方法,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;jdk1.8之后接口可以包含默认方法. 一个类只能继承一个直接父类 ...

  7. Java中 final static super this instanceof 关键字用法

    一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...

  8. Effective java笔记3--类和接口1

    一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...

  9. Effective java笔记3--类和接口2

    三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接 ...

随机推荐

  1. php move_uploaded_file保存文件失败

    move_uploaded_file保存失败后找错,先使用了try catch,但是没输出信息,才知道该函数在php中是警告属于error,不属于exeption,因此不能通过简单的if(!...)处 ...

  2. 🤩全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👻002 # 第二单元 常量,变量,数据类型 #

    一.本单元知识点概述 二.本单元目标 (Ⅰ)重点知识目标 1.定义出各种数据类型的变量2.理解自动类型提升3.理解强制类型转换 (Ⅱ)能力目标 1.能够定义出所有类型的常量 2.理解Java中的基本数 ...

  3. php laravel v5.1 消息队列

    * install https://laravel.com/docs/5.1#installationcomposer create-project laravel/laravel msgq &quo ...

  4. centos 7 & 6 优化脚本

    简单优化 ,未涉及安全优化,如有需求请自行修改脚本实现 1 #!/bin/bash 2 SysVer=`cat /etc/redhat-release | awk -F'release' '{prin ...

  5. P6672-[清华集训2016]你的生命已如风中残烛【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P6672 题目大意 长度为\(m\)的序列\(a\),有\(n\)个数字不是\(0\),其他\(m-n\)个是\(0 ...

  6. CF618F-Double Knapsack【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/CF618F 题目大意 给出大小为\(n\),值域为\([1,n]\)的两个可重集合\(A,B\) 需要你对它们各求出 ...

  7. P3337-[ZJOI2013]防守战线【单纯形】

    正题 题目链接:https://www.luogu.com.cn/problem/P3337 题目大意 \(n\)个地方可以建立塔也可以不建立塔,第\(i\)个位置建立需要消耗\(C_i\)元 \(m ...

  8. Python3入门系列之-----元组

    元组 Python 的元组与列表类似,不同之处在于元组的元素不能修改 元组使用小括号,列表使用方括号 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 实例 tup1 = (1,2,3,4, ...

  9. 项目配置shiro原缓存注解失效

    项目用springboot + shiro + ehcache @cacheable 注解不起作用原因 Shiro框架初始化比Spring框架的某些部件早,导致使用@Autowire注入Shiro框架 ...

  10. 配置一个简单的传统SSM项目

    背景 我们知道,从2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE开发中的标准,早期的项目都是传统的Spring-SpringMVC-Mybatis项目,打成一个war包丢 ...