欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

补充

程序员文章站 2022-05-13 15:51:53
...

③实例化子类对象时会默认先执行父类构造(默认使用无参构造),调用父类构造的方法体先执行,再实例化子类对象并且调用子类的构造方法。(对于子类构造来说,相当于隐含super())

super使用注意事项: this使用注意事项:
①super必须出现在子类的方法或构造方法中。 ①通过this调用构造方法,仅仅在类的构造方法中才能使用。
②用于访问父类成员,例如父类的属性 方法 构造方法。 ②函数参数或函数中的局部变量和成员变量同名时, 则需要用"this.成员变量"来引用成员。
访问权限有限制,无法通过super访问private成员 ③引用该函数当前对象时,直接用this。
	super()this()的不同
					super:									this:
 1.功能      子类调用父类构造 父类方法 父类属性。              调用本类构造 本类方法 本类属性。
 2.形式      不查找子类,直接调用父类操作。                    先查找本类中是否存在有指定的调用结构,如果有则直接调用,没有则调用父类定义。
 3.特殊      ————                                           表示本类的当前对象。
简单来说,就是super()认准父类,只查找父类。this()认准本类,优先查找本类,没有再调用父类。

覆写(分为方法的覆写和属性的覆盖,下面只说方法的覆写)

限制:被子类覆写过的方法不能拥有比父类更严格的访问控制权限。

方法的重载和覆写的区别
发生范围: 重载发生在一个类里面,覆写发生在继承关系里面。
定义:重载方法名称相同,参数的类型及个数不同。 覆写方法名称,参数的类型和个数相同,方法返回值相同。
权限:重载方法没有权限的限制。 覆写 被覆写的方法不能拥有比父类更为严格的访问控制权限。

1.重载:同一个方法名称相同,根据不同的参数类型及个数完成不同的功能。
覆写:同一个方法名称相同, 根据实例化的子类对象不同,所完成的功能也不同。

2.对象的多态性:父子类对象的转换。(看new的是谁

向上转型: 子类对象变为父类对象,格式 : 父类 父类对象 = 子类实例 , 自动转换; A a= new B();
向下转型: 父类对象变为子类对象, 格式 : 子类 子类对象 = (子类) 父类实例 , 强制转换; B b = (B) a; (父类调用子类方法)
向下转型前必须发生向上转向才可以向下转型。(int和long)

(2)多态:同一个引用类型,使用不同的实例而执行不同操作。(同一种事物,由于条件不同,产生的结果也不同)
(3)多态产生的条件:继承、方法重写、父类的声明和子类的实例化。
(4)作用:对象向上转型的主要意义在于参数的统一,向下转型指的是父类调用子类的个性化操作方法。
instanceof关键字(判断某个对象是否是指定类的实例)
对象 instanceof 类 返回 boolean型 (判断向下转型)

依靠对象的向上转型概念,可以通过抽象类的子类完成抽象类的实例化对象操作。
(5)限制:①抽象类不能使用final定义,因为抽象类必须有子类,而final定义的类不能有子类。

抽象类中可以没有任何抽象方法,但只要是抽象类,就不能直接使用关键字new实例化对象

③抽象类中依然可以定义内部的抽象类,而实现的子类也可以根据需要选择是否定义内部类来继承抽象内部类。外部抽象类不允许使用static声明,而内部的抽象类允许使用static声明,此时内部抽象类就相当于是一个外部抽象类,
继承的时候使用 “外部内.内部类”的形式表示类名称。(static 定义的是类)

在抽象类中,如果定义了static属性或方法,就可以在没有对象的时候直接调用。(此时可以没有子类)

接口的对象可以利用子类对象的向上转型进行实例化操作。

如果一个子类既要继承抽象类又要实现接口,那么应该采用先继承(extends)后实现接口(implements)的顺序完成。
class X extends C implements A,B

⑤一个抽象类可以继承一个抽象类或者实现若干个接口,但是反过来,一个接口却不能继承抽象类。一个接口可以使用extends关键字同时继承多个父接口。(接口多继承)

4)抽象类与接口的区别(优先考虑接口)
抽象类 接口
①关键字: abstract class interface

②组成: 构造 普通 抽象 static 方法 常量 变量 抽象方法 全局变量

③子类使用: class 子类 extends 抽象类 class 子类 implements 接口,接口,……

④关系:一个抽象类只能继承一个抽象的父类,抽象类可以实现多个接口。而接口不能继承抽象类,但一个接口可以继承(用extends)多个父接口。

⑤权限: 抽象类可以使用各种权限 接口只能使用public权限

⑥限制: 抽象类单继承局限 接口没有单继承局限

⑦子类: 抽象类和接口都必须有子类,子类必须要覆写全部的抽象方法。

⑧实例化对象: 都是依靠子类的向上转型进行对象的实例化。

一个子类只能继承一个抽象类,却可以实现多接口。(接口主要用于解决单继承局限)
抽象类要被子类继承,接口要被类实现。

子类重写父类方法时访问权限只能增大不能减小,也就是说:父类方法如果是public修饰的子类必须也有public修饰;父类方法如果是protected修饰,子类可以用protected或public修饰都可以。

关于abstract为什么不能和static连用

静态变量所有实例共享

被static修饰的方法在和没有static修饰的方法在内存中的位置不一样。。
被static修饰的方法属于类,是类自己的东西,不是给子类来继承的。就好像类是个房子,它的静态方法是里面的一面墙,每个人都可已在墙上画画,你画的东西别人也能看到,属于大家共同使用。你想通过继承来把这面墙拿走也不可能拿走,他是从属于类的。
而抽象方法本身没有实现,就是用来给子类继承,存在内存中的位置也不是一样的。用static修饰就不能被子类继承了。同样 你可以这么理解。
抽象方法相当于房子中地上的白纸,继承了它的子类就必须从地上拿一张白纸回去画画,你想怎么画怎么画。
一个相当于墙,你是拿不走的。一个相当于地上的纸,而且规定你实现了就必须拿走。

上转型的方法与属性调用问题

总结:方法可重写,属性不可重写。父类的方法被子类覆盖,父类的属性不被子类覆盖。

/*多态的注意事项
(1)如果子类重写了父类方法, 意味着子类里定义的方法彻底覆盖了父类里同名的方法, 系统将不可能把父类里的方法转移到子类中
补充对(1)的个人理解: 当s向上转型传给了b, b即使想调用自有的方法, 调用的依然是被重写的子类的方法。编译看左边, 运行看右边。
(2)对于实例变量(即属性), 即使子类里定义了与父类完全相同的示例变量, 这个实例变量依然不可能覆盖父类中定义的示例变量, 编译运行均看左边
*/

接口上转型

向上转型只能够调用子类重写的方法,子类独有的方法在父类中根本没有定义,所以父类无法找到子类独有的方法。

接口中默认权限的问题

接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

论述题、简述RFID的组成

检验和方法有几种 都有哪些特点

画出1 0011 0111 的曼彻斯特码波形。若曼彻斯特码的数据据传输速率为 1200Kb/s ,则他的波特率是多少?

在传输的帧中,被校验和CRC码组成的比特序列为 11 0000 0111 0111 0101 0011 0111 1000 0101 1011。若已知生成式的阶数为4阶,请给出余数多项式。

天线的效率、增益

相关标签: Java

上一篇: 生成验证码

下一篇: 生成验证码