首页 > 技术文章 > Java之再初识五

hzau-xpgao 2020-10-26 20:47 原文

 本篇博客主要解决以下几个问题:

  •  1、如何实现两个对象之间互发消息

  •  2、组合与继承的区别以及两者的使用场景

  •  3、Java运行时多态的含义及其作用

  •  4、简述运算符instanceof的使用场景     

---------------------------------------------------------------------------------------------------------------------------------------

两个对象之间互发消息:

  分别在两个类中将另一个类定义为自己的属性,通过构造函数实现互发消息。

  下面通过一个实例来说明:

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运算符长应用于继承的场景。

 


 

 

以上就是这篇博客的全部内容,如有错误,欢迎指正!

推荐阅读