java组合、继承

一、组合

在一个类中有另一个类的对象。“has-a”

示例

class Water{
    private String s;
    Water(){
       System.out.println("Water()");
       s = "Constructed";
    }
    public String toString(){ return s;}
}

public class SprinklerSystem{
    private String value;
    private Water w = new Water();//这就是组合
    private int i;
    public String toString(){
        return "value = "+ value +" i = "+ i +” w = "+ w;
    }
    public static void main(String[] args){
        SprinklerSystem sprintlers = new SprinklerSystem();
        System.out.println(sprinklers);
    }
}
输出:
Water()
value = null i = 0 w = Constructed


private Water w = new Water();这就是组合,在一个类中创建另一个类的对象。并且这个对象w和SprinklerSystem类的对象的生命周期相同。

每一个非基本类型的对象都有一个toString()方法,当编译器需要一个String而只有一个对象时如:System.out.println(sprinklers);便会调用toString()方法。

二、继承

继承:is-a,讲一个类的属性和方法保留,加上自己特有的方法和属性形成新类。

示例

class Person{
    public void eat(){
        System.out.println("Person在吃东西");
   }
    private void sing(){
        System.out.println("Person在唱歌");
   }
}

class Man extends Person{
     public void dance(){
         System.out.println("Man在跳舞");
    }
}

public class Test{
    public static void main(String[] args){
        Person p = new Person();
        Man m = new Man();
        p.eat();
        p.sing();
        //p.dance();父类不可以调用子类的方法。
        m.eat();
        //m.sing() sing方法为private,子类不可以调用父类private修饰的方法和变量。
        m.dance();
    }
}      
输出

Person在吃东西

Person在唱歌

Person在吃东西

Man在跳舞

当创建一个类的时候,总是在继承。除非已明确向上述代码中指出从其他类中继承,否则就是隐式地从java根类Object。所有的类都是Object的子类(直接子类或间接子类)。继承在继承过程中,并不一定非得要调用基类的方法。也可以在导出类中添加新的方法。子类与父类初始化顺序可以查看这里

三、组合与继承之间选择

组合和继承都允许在新的类中放置其他类对象,组合是显示地这样做,而继承是隐式的做。

组合技术通常用于在新类中使用现有类的功能而非它的接口这种情形。即,在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类定义的接口,而非所嵌入对象的接口。

在继承的时候,使用某个现有类,并开发一个它的特殊版本。通常,这意味你在使用一个通用类,并为了某种需要而将其特殊化。车子 就是 交通工具的一个特殊化,is-a的关系是用继承表达的,而has-a的关系是用组合来表达的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java继承组合是两种实现代码复用的方式。继承是指一个类可以继承另一个类的属性和方法,从而实现代码的重用。组合则是指一个类包含另一个类的对象作为其属性,从而实现代码的重用。 在图形类的设计中,可以使用继承组合来实现图标的功能。首先,可以定义一个基础的图形类,包含常见的属性和方法,如形状、颜色、大小等。然后,可以使用继承来定义不同类型的图形类,如圆形、矩形、三角形等,这些子类会继承基础图形类的属性和方法,同时可以根据具体需求进行扩展和重写。 而在实现图标功能时,可以使用组合组合不同类型的图形类。可以定义一个图标类,包含一个图形类的对象作为其属性。图标类可以具有自己的属性和方法,如位置、旋转角度、比例等。通过组合,可以将不同类型的图形组合在一起,形成一个复杂的图标。同时,也可以通过修改图形类的对象来改变图标的形状、颜色等属性。 继承组合都是实现代码复用的重要方式,但在具体使用时需要考虑到实际需求和设计的灵活性。继承能够实现代码的重用,但会增加类的耦合性;组合能够实现更灵活的组合和功能扩展,但需要更多的代码来实现。因此,在具体的图标设计中,可以根据具体需求和设计规范选择合适的方式来实现图标的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值