《嗨 Java》第四章:包和继承

什么是包?

包是一种组织类的一种形式,最主要的是防止类名冲突,所以一个类会定义到一个包里当想用这个包里的类的时候就要先导包来引导编译器找到这个类。

Java中的包类似C++里面的#include但是有一点区别,Java导包不能导入具体的包,只能导入具体包里面的具体的类。

如果使用“通配符”来导入一个包里面的所有内容,那么Java不会全部导入进来,而是在程序运行的时候需要那个包的类就会自动去找,而不是全部正进来这样大大提高了空间利用率。

如果是C++那么包一个头文件会把所有方法都拷贝进主方法,不管你会不会用得到。

导入包中的类

Java中导入包的语法:import java.包名.类名

例子:

import java.util.Date

package和import的区别

package 类似C++里面的命名空间域给源文件标记一个名字,这样就可以防止名字冲突。

import类似C++里面的包含头文件,用来告诉编译器哪里可以找到这个类。

静态导入

使用import static可以导入包中的静态方法和字段,不过这种导入方式用的场景非常少,我们了解即可。

例子:

import static java.lan.Math.*;

public class Test {
    public void main(String[] args) {
        //静态导入包,可以神略类名来调用方法
        double ret = sqrt(8);
    }
}

将类放到包中

基本规则

  1. 在文件的第一行加package关键字来指定该代码在那个包中。
  2. 包名需要尽量指定成唯一的名字,通常会用公司的域名颠倒形式(com.ls.demo)
  3. 包名和代码的路径要匹配(如:创建com.ls.demo的包,那么会存在一个对应的路径com/ls/demo来存储代码。
  4. 如果一个类中没有package来指定是那个包中的类,那么该类会放到默认包中。

具体操作步骤

创建包:

image-20220602162036287

创建包名:

image-20220602162136718

回车表示输入完成,当回车之后会生成一个包。

image-20220602162228395

接着我们在新建的包里面创建一个类。

image-20220602162348188

此时编译器就会在磁盘上创建一个路径,我们跟着路径走到低回发现有一个刚刚我们创建的类。

image-20220602162559260

同时我们用idea打开这个类会发现idea会自动帮我们加上package指定包。

image-20220602162728589

包的访问控制权限

publicprivate也能对包进行作用,如:包中的一个成员有priavte权限只能在类里面使用,如果是public则可以在包外也能调用,如果什么都不加那么默认只能在包里面使用该成员。

常见的系统包

  1. java.lang(系统常用基础类,此包从JDK1.1之后就会自动导入)
  2. java.lang.reflect(Java反射包)
  3. java.net(进行网络编程开发包)
  4. java.sql(数据库开发的支持包)
  5. java.util(java提供的工具程序包,(集合类等等)很重要)
  6. java.io(I/O编程开发包)

继承

继承本质是为了提高代码的复用性,减少冗余代码来达到高效开发的目的。

继承除了private修饰的成员,其它成员都会被子类继承。

举个例子: 动物,动物有很多种而动物都有一个特性有性别、年龄和行为等等……如果我们一个动物定义一个类的会,那么里面会有很多重复出现的成员,这时我们可以不可以用一个类概括所有动物而且这个类都有所有动物都会有的成员,于是就有了这样的设计先创建一个动物类,再用一个具体的动物类来继承这个动物这样提高了代码的复用性同时也减少了代码量。

继承语法

继承语法: class 子类 extends 父类 {}

  • Java中不存在多继承只有单继承。
  • 使用extends来指定继承的父类
  • 子类可以使用父类里面的所有public的字段和方法。
  • 父类中的private修饰的字段和方法,对于继承的子类是不可见的(当然也可以理解成没有继承下来也对)。
  • 子类的实列中也包含了父类的实列,可以使用super关键字得到父类实列的引用。

this和super的区别

this的作用是在类里面是该类的一个实列引用,谁是实列,那么this就是那个实例的引用。

super的作用是显示调用父类的方法或成员,有时候子类和父类有一个相同名字的方法或成员变量,编译器调用自己当前类的,想调用父类的就用supear显示调用。

protected关键字

有时候我们对成员的权限控制的时候有一个需求,我们想让子类能调用该方法同时不然类外的对象调用,这个时候我们用publicprivate都无法满足。

这时protected就诞生了,protected主要是用来解决继承中的问题,它可以被子类访问但不能被类外的对象访问。

  • 对于类的调用者来说protected修饰的字段和方法是不能访问的。
  • 对于类的子类和同一个包的其它类来说,protected修饰的字段和方法是可以访问的。

总结:Java中对于字段和方法共有四种访问权限

  • private:类内部能访问,类外部不能访问。
  • 默认(包访问劝降):类内部能访问,同一个中的类也能访问,其它类不能访问。
  • protected:类内部能访问,子类和同一个包中的类也可以访问,其它类不能访问。
  • public:类内部和类的调用者都能访问。

final关键字

final不仅可以修饰一个变量或字段,还能修饰类。(修饰字段或变量的时候表示该变量是常量)

当也给类被final修饰的时候是无法继承的。

例子:

final class A {//表示无法被继承
    
}

class B extends A {//如果强行继承编译器会报错
    
}
  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值