JAVA 关于继承和组合

一、继承

    继承(inheritance)是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展(extends)(增加功能)产生新的类,称派生类。继承主要解决的问题是:共性的抽取。被继承的类我们称为父类基类超(级)类,产生的新我们称为子(级)类派生类

1)语法规则:

class 子类 extends 父类 {
    
}
①使用 extends 继承 父类;
②Java 中一个子类 只能 继承 一个 父类;继承后在子类的对象中就 会存在父类的 数据成员;
③子类会继承父类的 所有 public 的字段和方法 ;对于父类的 private 的字段和方法 子类是 无法访问 的(会继承);
④子类的实例中 包含着父类 的实例, 可以使用 super 关键字得到父类实例的引用;
 

※注意:在调用子类构造方法之前会先调用父类构造方法,当子类构造方法中没有使用"super(参数或无参数)"指定调用父类构造方法时,是默认调用父类的无参构造方法;如果父类中包含有参构造方法,就没有系统所提供的无参构造方法了,则这时在子类构造方法中一定要使用“super(参数)”指定调用父类的有参构造方法,且必须放在第一行,不然就会报错。

2)protected关键字:

    我们知道,如果把字段设为 private,子类不能访问但是设成 public又违背了我们 "封装" 的初衷。那么,两全其美的办法就是使用 protected 关键字。因为对于类的调用者来说,protected 修饰的字段和方法是不能访问的;对于类的 子类 同一个包的其他类 来说,protected 修饰的字段和方法是可以访问的。

※注: 我们希望类要尽量做到 " 封装 ", 即: 隐藏内部实现细节 只暴露出 必要 的信息给类的调用者 因此我们在设计的时候应该尽可能的使用 比较严格 的访问权限,即: 如果一个方法能用 private 就尽量不要用 public
 
3)复杂的继承关系: 多层 继承, 即子类还可以进一步的再派生出新的子类。但 即使这样可以 , 却 并不希望类之间的继承层次太复杂, 一般不要 出现 超过三层 的继承关系。
 
4)final关键字:
    当final 修饰一个变量或者字段的时候 , 表示 常量在赋值之后无法改变;当final修饰的是引用类型时,表示不能再指向别的东西(即 赋值后其指向地址无法改变),但是可以改变其中的内容;且final修饰的 方法不允许被子类覆盖,final修饰的 类也不能被继承
    final修饰的成员变量在赋值时可以有三种方式:①在声明时直接赋值;②在构造器中赋值;③在初始代码块中进行赋值。
 
5)关于 this 和 super(获取到父类实例的引用) :
    如果是子类的某个属性是 继承自的父类的属性,那么可以 既可以用 this.属性 访问(或修改内容) 也可以用 super.属性 访问(或修改内容),修改后改变的也是 同一个对象,因为这时二者表示的是同一个属性对象;但如果子类 新建了一个和继承自父类的属性 一样的属性,那么此时 this.属性 和 super.属性 表示的就 不是同一个对象了,二者 互不影响,且想访问子类的这个属性就 只能通过 this.属性 的方法了。
 
 

二、组合

    组合和继承类似, 也是一种表达类之间关系的方式, 也能够达到 代码重用 的效果。 组合 将一个类的实例作为另外一个类的字段
 
※区别继承和组合: 组合表示 has - a 语义,即 "包含 " 的关系; 继承表示 is - a 语义,即 "是 " 的关系。  
Java继承组合是两种实现代码复用的方式。继承是指一个类可以继承另一个类的属性和方法,从而实现代码的重用。组合则是指一个类包含另一个类的对象作为其属性,从而实现代码的重用。 在图形类的设计中,可以使用继承组合来实现图标的功能。首先,可以定义一个基础的图形类,包含常见的属性和方法,如形状、颜色、大小等。然后,可以使用继承来定义不同类型的图形类,如圆形、矩形、三角形等,这些子类会继承基础图形类的属性和方法,同时可以根据具体需求进行扩展和重写。 而在实现图标功能时,可以使用组合组合不同类型的图形类。可以定义一个图标类,包含一个图形类的对象作为其属性。图标类可以具有自己的属性和方法,如位置、旋转角度、比例等。通过组合,可以将不同类型的图形组合在一起,形成一个复杂的图标。同时,也可以通过修改图形类的对象来改变图标的形状、颜色等属性。 继承组合都是实现代码复用的重要方式,但在具体使用时需要考虑到实际需求和设计的灵活性。继承能够实现代码的重用,但会增加类的耦合性;组合能够实现更灵活的组合和功能扩展,但需要更多的代码来实现。因此,在具体的图标设计中,可以根据具体需求和设计规范选择合适的方式来实现图标的功能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值