/**
* 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类
* 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的那些魔术方法(一)

    在PHP中,有一堆魔术方法,服务于类和对象.PHP虽然也是纯种的面向对象语言,但是之前的PHP还真不是,所以有一些面向对象的标准实现并不完善,比如重载.但是,我们可以通过一些魔术方法来弥补,例如__c ...

  2. python3.7发送邮件带附件

    代码: 1 # -*- coding: utf-8 -*- 2 3 import smtplib, ssl 4 from email.mime.text import MIMEText 5 from ...

  3. 踩坑系列《十一》完美解决阿里云vod视频点播无法播放音频和视频点播控制台里的媒资库里面的视频无法播放

    刚开始项目部署的时候,音频还是正常播放,后面直接报了 获取m3u8文件失败(manifestLoadError) 的错误,原因是 我的域名 xxx.com 这个域名没有解析到点播提供的CNAME上,所 ...

  4. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  5. BootstrapBlazor 模板安装

    原文地址:https://www.cnblogs.com/ysmc/p/15400270.html Bootstrap Blazor Project Template 为方便大家的使用,Bootstr ...

  6. 世纪联华的 Serverless 之路

    作者 | 朱鹏(旻苍) 来源 | Serverless 公众号 一.世纪联华超市简介 1. 公司简介 杭州联华华商集团有限公司成立于 2002 年 7 月,主要业务涵盖购物中心.大卖场.超市.便利店等 ...

  7. 【Ubuntu】VirtualBox 您没有查看“sf_VirtualDisk”的内容所需的权限

    ​ 但是现在发现无法去访问,没有权限: ​ 即使是: crifan@crifan-Ubuntu:~$ sudo chown -R crifan /media/sf_win7_to_ubuntu/ cr ...

  8. hmac和socketserver

    一,hmac 验证客户端的合法性 hmac,检测客户端是否合法,不依赖登录认证 server import os,socket,hmac sk=socket.socket() sk.bind(('12 ...

  9. CF280C Game on tree(期望dp)

    这道题算是真正意义上人生第一道期望的题? 题目大意: 给定一个n个点的,以1号点为根的树,每一次可以将一个点和它的子树全部染黑,求染黑所有点的期望 QwQ说实话,我对期望这种东西,一点也不理解... ...

  10. Johnson 全源最短路径算法学习笔记

    Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...