java复习之修饰符,导包,继承与多态

修饰符,导包,继承与多态

修饰符效果

关系 : 从 近 到 远

修饰词本类同一个包的类(同包能用吗)继承类(子类能用吗)其他类(导包能用吗)
private×××
无(默认)××
protected×
public

正确的理解

(下面介绍的是比上面修饰符依次多出的范围)

本类访问: run()

同一个包的类: new A().run() 或者 静态: A.run() (相当于不理会导包/继承操作,只认自己的包友)

继承类: run() (导包后继承 相当于拥有那部分代码了 extends 之后相当于本类的了)

其他类:无限用 不需要关系

导包后 new A().run() 或者 静态: A.run()

其实并不需要导包就可以用new 只是他不知道你new的哪个包里的, 导包的意义仅仅是告诉他这个类是哪个包里的

不导包:    导包相当于缩写
    
new com.langsin.aa.Son().run();

implements是导包+继承(拥有代码 并重写) 所以需要public

public 导包能用的意义: 我就想用它一个函数 你全继承过来 太大了 所以直接导包用一个最好

导包与继承的区别:

继承可以把父类的方法重写,改为想要的代码,而导包表示引入原本已经写好的程序,但是不能更改包内的内容;


什么时候用静态 static

如果这个方法不需要你这个类的对象.那么写成静态的

比如我Collects 里的排序方法

可以给int double排序 并不依赖你的Collects对象 则不需要. 而 getCollectById这种 就需要Collects对象了 那么不能静态.


子类拥有父类非 private 的属性、方法。(不包含构造)

实例化

接口,抽象类都不可以实例化

只要有abstract 函数 一定是接口/抽象类

继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

java可以同时继承父类、实现接口

构造函数

new CLASS(); 就是调用构造函数

如果父类构造函数有参,那么子类必须在构造的时候调用父类构造

子类调用父类构造函数的写法: super();

四、默认构造函数
当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方便该类初始化。只是该空构造函数是隐藏不见的。

当在该类中自定义了构造函数,默认构造函数就没有了。

如果仍要构造函数,需要在类中手动添加。

1.接口是没有静态代码块或者构造方法的。

抽象类

当一个类中包含一个或多个抽象函数时,则当前类必须申明成抽象类

(如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。)

抽象类不能被实例化

只是对接口进行了进一步描述

可以有属性, 可以有函数

抽象类可以有普通函数和变量,而接口中只能存在public abstract 方法;

多态的用处: 可以通过多态对象a.run() 直接调用 子类重写过的函数

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();

instanceof 运算符 判断a对象是否属于A类

用法: a instanceof A

作用: 多态之后可以通过强转会子类后{ Cat c = (Cat) a} ,c.run() 调用子类 所有函数(不仅仅是重写父类的函数,重写父类的函数可以直接多态a.run)

虚函数

虚函数的存在是为了多态。

Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值