今日无事,学习。

今日总结:

Java学习:

继承:Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。

继承的特点:子类能继承父类的非私有成员(成员变量、成员方法)

继承后对象的创建:子类的对象是由子类、父类共同完成的。

例:public class B(子类) extends A(父类){}

注意事项:

1、权限修饰符:用来限制类中的成员(成员变量、成员方法、构造器、代码块..能够被访问的范围。

修饰符

在本类中

同一个包下的其他类里

任意包下的子类里

任意包下的任意类里

private

缺省

protected

public

2、单继承,Object类

①Java是单继承的:一个类只能继承一个直接父类;Java中的类不支持多继承,但是支持多层继承。

②Object类是Java中所有类的祖宗。

3、方法重写:当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。

●注意:重写后,方法的访问,Java会遵循就近原则。

方法重写的其它注意事项:

重写小技巧:使用Override注解,他可以指定java编译器,检查我们方法重写的格式是否正确,代码可读性也会更好。

子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public > protected>缺省)。

重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。

私有方法、静态方法不能被重写,如果重写会报错的。

4、子类中访问其他成员的特点

1、在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。

●先子类局部范围找。

●然后子类成员范围找。

●然后父类成员范围找,如果父类范围还没有找到则报错。

2、如果子父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类的怎么办?

●可以通过super关键字,指定访问父类的成员: super.父类成员变量/父类成员方法

5、子类构造器特点:子类的全部构造器,都会先调用父类的构造器,再执行自己。

子类构造器是如何实现调用父类构造器的:

●默认情况下,子类全部构造器的第一行代码都是super()(写不写都有),它会调用父类的无参数构造器。

●如果父类没有无参数构造器,则我们必须在子类构造器的第一行手写super(...)指定去调用父类的有参数构造器。

补充知识:

this(..)调用兄弟构造器:

●任意类的构造器中,是可以通过his(..)去调用该类的其他构造器的。

this(..)和super(..)使用时的注意事项:

●this(...)、super(..)都只能放在构造器的第一行,因此,有了this(..)就不能写super(..)了,反之亦然。

多态:在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

多态的前提

●有继承/实现关系;存在父类引用子类对象;存在方法重写。

多态的一个注意事项

●多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。

方法:编译看左,运行看右 变量:编译看左,运行看左

多态的好处和问题

●可以解耦合,扩展性更强;使用父类类型的变量作为方法的形参时

,可以接收一切子类对象。

●多态不能直接调用子类的独有方法

多态下的类型转换

●自动类型转换:父类变量名=new子类()

●强制类型转换:子类变量名=(子类)父类变量

强制类型转换的一个注意事项

●存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。

●运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException) 的错误出来。

final

●final关键字是最终的意思,可以修饰(类、方法、变量)

●修饰类:该类被称为最终类,特点是不能被继承了。

●修饰方法:该方法被称为最终方法,特点是不能被重写了。

●修饰变量:该变量只能被赋值一次。

final修饰变量的注意

●final修饰基本类型的变量,变量存储的数据不能被改变。

●final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

抽象类和抽象方法:

●都是用abstract修饰的;抽象方法只有方法签名,不能写方法体。

抽象类有哪些注意事项和特点?

●抽象类中可以不写抽象方法,但有抽象方法的类一定是抽象类

●类有的成员(成员变量、方法、构造器)抽象类都具备。

●抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。

●一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。