---------------------------------------------------------------------------------------------------------------------------------------
两个对象之间互发消息:
分别在两个类中将另一个类定义为自己的属性,通过构造函数实现互发消息。
下面通过一个实例来说明:
package xp.practice; class RunA { private RunB b; public void SetB(RunB _b) { if(_b!=null) { b=_b; } } public RunB GetB() { if(b!=null) return b; else return null; } public static void main(String[] args) { System.out.println("对象RunA向对象RunB发送消息"); RunA a=new RunA(); RunB b=new RunB(a); if((a.GetB())!=null) { System.out.println("对象RunB向对象RunA发送消息"); System.out.println("对象RunA接收到了RunB的消息"); } } } class RunB { private RunA a; public RunB(RunA a) { this.a=a; System.out.println("对象RunB接收到了RunA的消息"); a.SetB(this); } }
运行结果为:
组合与继承:
组合是一种较弱的关系,是has-a的关系。
优点:
1、不破坏封装,松耦合
2、具有可扩展性
3、支持动态组合
缺点:整体类不能自动获得和局部类同样的接口
继承实现方法的复用
优点:
1、代码复用
2、子类可重写父类的方法
3、创建子类对象时,无需创建父类的对象,子类自动拥有父类的成员变量和行为
4、子类在父类的基础上可根据自己的业务需求扩展
缺点:破坏封装
使用场景:
该处转载于:https://blog.csdn.net/zh15732621679/article/details/79443757
多态的含义与作用:
含义:同一个实现接口,使用不同的实例而执行不同的操作
作用:1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
2. 派生类的功能可以被基类的方法或引用变量所调用,可以提高可扩充性和可维护性。
JAVA提供两种多态机制:重载与覆盖
重载举例:
class A{ public int getNum(){ return 1; } public int getNum(int i){ return i; } }
注:同名同参数但不同返回值的方法不是重载
覆盖举例:
class Parent{ public void show(){ System.out.println("Parent Method"); } } class Son extends Parent{ public void show(){ System.out.println("Son Method"); } public static void main(String[] args){ Son s=new Son(); s.show(); } }
上述代码输出结果为“Son Method” ;说明子类的show方法覆盖了父类的show方法
运算符instanceof:
运算符的格式为:“ a instanceof A", 其中a为对象的引用,A为类。
如果a为A的实例或A子类的实例,则返回true;
如果a为A的父类的实例,则返回false;
如果a对象的类与A没有任何关系,则编译不会通过。
故instanceof运算符长应用于继承的场景。
以上就是这篇博客的全部内容,如有错误,欢迎指正!
原文:https://www.cnblogs.com/hzau-xpgao/p/13881076.html