instanceof关键字
/**
instanceof 关键字
*/
public class PolymorphismDemo
{
public static void main(String[] args)
{
Man man = new Man();
say(man);
Women w = new Women();
say(w);
}
/*public static void say(Man m)
{
m.say();
}
public static void say(Women w)
{
w.say();
}*/
public static void say(Person p)
{
p.say();
//p.getangry(); 父类必须得有这个方法,子类自己有的,不能被调用
//判断p对象是否为Women的实例
if(p instanceof Women)
{
Women w = (Women)p;
w.getangry();
}
}
}
abstract class Person
{
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public abstract void say();//抽象方法
}
class Man extends Person
{
public void say()
{
System.out.println("我是男的,我继承了人这个类");
}
}
class Women extends Person
{
public void say()
{
System.out.println("我是女人,我继承了人这个类");
}
public void getangry()
{
System.out.println("我是女人,我很生气");
}
}
父类的设计法则
抽象类应用
import java.util.Random;
/**
抽象类的应用
competition 竞争
*/
class AbstractDemo
{
public static void main(String[] args)
{
School s = new Student("小白");
System.out.println("招聘信息现在开始:");
s.action();
}
}
abstract class School
{
//招聘信息
public void action()
{
if(competition())
{
System.out.println("恭喜你,加入本学校学习");
}else{
System.out.println("Sorry 回家多练习练习吧");
}
}
//比赛方法
public abstract boolean competition();
}
class Student extends School
{
private String name;
public Student(String name)
{
this.name = name;
}
public boolean competition()
{
System.out.println("我是"+name);
System.out.println("考试开始,成不成功,听天由命");
Random r = new Random();
return r.nextBoolean();//返回一个boolean值方法
}
}
模板方法设计模式(Templete Method): 定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤
接口的应用
/**
接口的应用
*/
class InterfaceDemo
{
public static void main(String[] args)
{
Person p = new Person("小白");
p.setIsay(new Man());
p.say();
p.setIsay(new Women());
p.say();
}
}
//把说话的方法抽象为一个接口
interface Isay
{
public void say();
}
class Women implements Isay
{
public void say()
{
System.out.println("我是女人");
}
}
class Man implements Isay
{
public void say()
{
System.out.println("我是男人");
}
}
class Person
{
private String name;
private Isay isay;//把接口作为类中的一个属性(组合)
public void setIsay(Isay isay)
{
this.isay = isay;
}
public Person(String name)
{
this.name = name;
}
public void say()
{
isay.say();
}
}
策略设计模式:定义了一系列的算法,将没一种算法封装起来并可以相互替换,策略模式让算法独立于使用它的客户应用而独立变化
oo设计原则:
1、面向接口编程(面向抽象编程)
2、封装变化
3、多用组合,少用继承