javaSE 面向对象修饰符

文章目录一、关于访问修饰符1.1关于访问修饰符从小到大的顺序依次1.2关于包1.3包存在的意义是什么1.4如何导入包中的某个类遇到这种情况该如何解决?1.5静态导入(了解即可)1.6几种常见的系统包二、继承2.1定义2.2继承规则隐式继承(private属性和方法)补充三.关于protected访问权限3.1不在一个包中且不是一个子类无法访问3.2继承子类可以使用protected属性3.3同包中没有继承关系的类一、关于访问修饰符1.1关于访问修饰符从小到大的顺序依次private(私有,当前类的内
摘要由CSDN通过智能技术生成


一、关于访问修饰符

1.1关于访问修饰符从小到大的顺序依次

private(私有,当前类的内部可见) <defaul(f啥也不写就是包权限,当前包的内部可见,不包含子包,同级目录下可见)< proteced(继承,不同包的有继承关系的类之间可见)< public(当前项目可见)

1.2关于包

在这里插入图片描述

1.3包存在的意义是什么

使用包的主要目的是保证类的唯一性.
例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过
在这里插入图片描述
下面的Test类和上面的Test类是两个完全不同的类
在这里插入图片描述

1.4如何导入包中的某个类

在这里插入图片描述
在这里插入图片描述
但是" . "有时候会存在歧义*

比如util和sql都有date类,编译器不知道该匹配那一个类
在这里插入图片描述
遇到这种情况该如何解决?
在这里插入图片描述

1.5静态导入(了解即可)

例如:当导入System这个类之后,可以直接out.println(123)
在这里插入图片描述

1.6几种常见的系统包

在这里插入图片描述


二、继承

2.1定义

很多时候写代码会出现代码冗余的情况该如何解决?
这三个类都具备一个相同的 eat 方法, 而且行为是完全一样的.
这三个类都具备一个相同的 name 属性, 而且意义是完全一样的.
从逻辑上讲, Cat 和 Bird 都是一种 Animal (is - a 语义).
此时我们就可以让 Cat 和 Bird 分别继承 Animal 类, 来达到代码重用的效果

代码如下(示例):
在这里插入图片描述
关于代码冗余解决方案:
此时, Animal 这样被继承的类, 我们称为 父类 , 基类 或 超类, 对于像 Cat 和 Bird 这样的类, 我们称为 子类, 派生类
和现实中的儿子继承父亲的财产类似, 子类也会继承父类的字段和方法, 以达到代码重用的效果
在这里插入图片描述

2.2继承规则

a.要能使用继承,前提必须满足类之间的is a关系b.—个子类只能使用extends探承—个父类。(单继承)

b.Java中不允许多重继承。extends后面只能跟一个父类,允许多层继承,没法当儿子,可以当孙子。
在这里插入图片描述
此时如果Taidi继承了animal相当于也是Dog类的子类
在这里插入图片描述
c.子类会继承父类的所有属性和方法,显示继承(public属性和方法可以直接使用)
d.使用 extends 指定父类.
e.子类会继承父类的所有 public 的字段和方法.对于父类的 private 的字段和方法, 子类中是无法访问的.
f.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用

2.3隐式继承(private属性和方法)

子类其实也继承了这个属性和方法,但是无法直接在子类中使用。代码示例如下:
使用get和set的方法解决此类问题。
在这里插入图片描述
补充:静态的属性和方法是归于某个类所有,当一个类继承了另一个类,肯定所有静态属性和方法就继承。到底能否直接使用,还是要看权限是不是public权限


三.关于protected访问权限(重点,易错点)

切记:同包下的没有关系的类之间以及不同包的有继承关系的类之间可见的!!!!!(死记!!!!!)
在这里插入图片描述
先将animal类中name属性设置为protected属性(下面所有问题基于上图分析)

3.1不在一个包中且不是一个子类无法访问

在这里插入图片描述

3.2继承子类可以使用protected属性

在这里插入图片描述
但是如果出现以下的情况不可以使用!
在这里插入图片描述
在这里插入图片描述
person和animal两个类在分别不同的包中,test类和person类在一个包中。虽然person类继承了animal的属性,但是当前是在test这个类中调用。protected指的是不同包的具有继承关系的类的内部可见的。

解决上述问题的办法:将test类移动到父类一个包中,因为name属性是protected,相同的包下,没有继承关系的类可以使用protected。但是子包下是不可以使用的,只可以在同级目录。
在这里插入图片描述

3.3练习(重点)

代码示例如下

在这里插入图片描述
如果在子类中使用父类引用创建父类对象使用name就不可以,因为已经出了父类。(属于语法,记住即可)
在这里插入图片描述

3.4final关键字(重点)

曾经我们学习过 final 关键字, 修饰一个变量或者字段的时候, 表示 常量 (不能修改).

final int a = 10; 
a = 20; // 编译出错

final 关键字也能修饰类, 此时表示被修饰的类就不能被继承.

final public class Animal {
    
 ... 
} 
public class Bird extends Animal {
    
 ... 
} 
// 编译出错
Error:(3, 27) java: 无法从最终com.bit.Animal进行继承

我们平时是用的 String 字符串类, 就是用 final 修饰的, 不能被继承
在这里插入图片描述

四.super关键字

4.1this关键字用法

在这里插入图片描述

4.2 super关键字用法

在这里插入图片描述
要产生一个子类对象,就会先产生一个父类对象。比如在主类方法中new一个子类对象时
在这里插入图片描述

15年校招笔试题关于继承+构造方法+代码块调用问题

请问输出顺序是什么?

package animal;
public class B {
   
    public B() {
   
        System.out.println("1.B的构造方法---------------");
    }
    {
   
        System.out.println("2.B的构造块-----------------");
    }
    static {
   
        System.out
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值