JAVA中的组合与继承

本文详细解析了Java编程中的包、继承、组合等核心概念,包括它们的作用、使用方法及注意事项,帮助初学者理解类的组织、代码重用及类间关系。

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

一、包(Package)
1.包:组织类的一种方式.
2.主要目的:保证类的唯一性.
3.使用方法:一般使用 import 语句导入包.
(使用 import static 可以导入包中的静态的方法和字段)
4.将类放入包中的基本规则:
a.在文件的最上方加上一个 package 语句指定该代码在哪个包中.
b.包名需要尽量指定成唯一的名字(便于引用), 通常会用公司的域名的颠倒形式.
c.包名和代码路径需相匹配.
d.如果一个类没有 package 语句,则会被放入默认类中.
5.使用限制:如果某个成员不包含 public 和 private 关键字(public 和 private 的成员只能被类的内部使用), 此时这个成员可以在包内部的其他类使用, 但是不能在包外部的类使用.
6.常见的系统包简述:
a. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入.
b. java.lang.reflect:java 反射编程包.
c. java.net:进行网络编程开发包.
d. java.sql:进行数据库开发的支持包.
e. java.util:是java提供的工具程序包.(集合类等非常重要)
f. java.io:I/O编程开发包.

二、继承(Inherit)
1.父类与子类
例:

public class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }

    public void age(String age) {
        System.out.println(age);
    }
}
class Dad {
    public String name;

    public Dad(String name) {
        this.name = name;
    }

    public void age(String age) {
        System.out.println(age);
    }
}

class Son {
    public String name;

    public Son(String name) {
        this.name = name;
    }

    public void age(String age) {
        System.out.println(age);
    }

    public void subject(String subject) {
        System.out.println(subject);
    }
}

从代码来看,有很多冗余的部分:
a.这三个类都具备一个相同的 age 方法, 而且行为是完全一样的.
b.这三个类都具备一个相同的 name 属性, 而且意义是完全一样的.
c.Dad 和 Son 都属于 Person.
因此,可以让 Dad 和 Son 继承 Person 的方法和属性,以达到代码重用的效果.

Person 被称为 父类、基类、或超类;
Dad 和 Son 被称为 子类、派生类;

2.使用语法及注意事项
a.使用 extends 指定父类.
b.Java 中一个子类只能继承一个父类.
c.子类会继承父类的所有 public 的字段和方法.
d.对于父类的 private 的字段和方法, 子类中是无法访问的.
e.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用.
例:

class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }

    public static void age(int age) {
        System.out.println(age);
    }
}
class Dad extends Person {
    public Dad(String name) {
        super(name);
    }
}

三、protected 关键字
1.对于类的调用者来说, protected 修饰的字段和方法是不能访问的.
2.对于类的 子类 和 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的.

总结:
private: 类内部能访问,类外部不能访问;
protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问;
public: 类内部和类的调用者都能访问;
包访问权限(默认): 类内部能访问,同一个包中的类能访问,其他类不能访问;

四、final 关键字
作用:限制类被继承

final class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }

    public static void age(int age) {
        System.out.println(age);
    }
}
class Dad extends Person {
    public Dad(String name) {
        super(name);
    }
}

执行程序,编译出错:
在这里插入图片描述
五、组合(combination)
1.组合和继承类似, 也是一种表达类之间关系的方式, 也能够达到代码重用的效果.
2.组合并没有涉及到特殊的语法(诸如 extends 这样的关键字), 仅是将一个类的实例作为另外一个类的字段.
例:

public class Dad {
    public String name;

    public Dad(String name) {
        this.name = name;
    }

    public void age(int age) {
        System.out.println(age);
    }
}

public class Son {
    public String name;

    public Son(String name) {
        this.name = name;
    }

    public void age(String age) {
        System.out.println(age);
    }
}

public class family {
    public Dad[] dads;
    public Son[] sons;
}

注意:
a.组合表示 has - a 语义:
在刚才的例子中, 一个家庭中 “包含” 家庭成员 Dad 和 Son.
b.继承表示 is - a 语义:
在上面的 “Person 和 Dad” 的例子中, Dad 和 Son 都是 Person.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值