JAVA菜鸟入门篇 - 继承VS组合、final关键字 (十六)

本文详细阐述了继承与组合的概念区别,通过代码示例展示了如何在Java中使用组合来实现对象间的包含关系,并解释了final关键字在变量、方法和类上的应用规则与效果。同时,提供了创建常量、禁止子类重写方法和防止类被继承的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、继承VS组合


    继承我们十四章节说过啦,大家可以看看,现在我们来看看组合

    组合:将(继承中)父类当做一个属性变量放在子类(相对于继承而言,没有实现extends)中。


“is-a”关系使用继承!(是关系)

      - 上面的通过在Audi类中增加一个Car属性虽然也复用了代码,但是不合逻辑不容易理解

      - 比如说:哺乳动物是动物,但是绝对不能说哺乳动物包含动物


“has-a”关系使用组合!(包含关系)

      - 计算机类 ,主板类。可以通过在计算机类中增加主板属性来复用主板类的代码!

      - 计算机包含主板,同样不能说计算机是主板。

<span style="font-size:18px;">/**
 * 测试组合
 * @author dell
 *
 */
public class Animal2 {
	String eye;
	
	public void run(){
		System.out.println("跑跑!");
	}
	
	public void eat(){
		System.out.println("吃吃!");
	}
	
	public  Animal2(){
		super();
		System.out.println("创建一个动物!");
	}
	
	public static void main(String[] args) {
		Bird2 b = new Bird2();
		b.run();
		b.animal2.eat();  //利用实例化Bird2的对象b,调用b中的属性变量Animal2中的eat()方法
	}
	
}

class Bird2  {
	Animal2 animal2=new Animal2(); //原本Bird继承Animal2类,现在为了讲解组合的关系
	
	public void run(){  //run()与Animal2类中的run()方法不再是重写的关系
		animal2.run();
		System.out.println("我是一个小鸟!!");
	}
	/**
	 * Bird2类默认继承Object类,super()方法调用的是Object类的无参构造器方法
	 */
	public Bird2(){
		super();
		System.out.println("建一个鸟对象");
	}
	
}
</span>
显示结果:

创建一个动物!
建一个鸟对象
跑跑!
我是一个小鸟!!
吃吃!


总结:
从建模的角度来看,继承与组合是不同的概念;

从代码复用的角度来看,它们之间是可以互相取代的!


二、final关键字


修饰变量:
     - 常量,初始化之后不能再被修改;


修饰方法:
   - 该方法不可被子类重写。但是可以被重载


修饰类
     - 修饰的类不能有子类,不能被继承。比如:Math、String


1.修饰变量:被final修饰的 变量就是常量,所以在写的时候一般采用大写

<span style="font-size:18px;">final int MAX_VALUE= 200;    //常量,初始化之后,<span style="font-family: Arial, Helvetica, sans-serif;">MAX_VALUE值就不能修改,否则会报错误:Syntax error on token "Invalid Character", ; expected</span></span>
2.修饰方法

<span style="font-size:18px;"><span style="white-space:pre">	</span>public /*final*/ void run(){   //final加到方法前面,意味着该方法不能被子类重写!
		System.out.println("跑跑!");
	}
	
	public void run(String str){ //这里形参str没有具体应用到,仅仅实现以下重载 
		System.out.println("实现run()方法的重载!");
	}</span>

3.修饰类

<span style="font-size:18px;">public /*final*/ class Animal {    //final修饰类则说明,这个类不能被继承!
	
	public  void run(){  
		
		System.out.println("跑跑!");
	}
}


class Bird  extends Animal {
	
	public void run(){
		super.run();
		System.out.println("我是一个小小小小鸟,飞呀飞不高");
	}
	
}</span>
如果final修饰类,修饰的类不能有子类,不能被继承。否则会报错误:Illegal modifier for the class Animal; only public, abstract & final are permitted

本文参考:非常感谢北京尚学堂高琪老师!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值