java学习与应用(2)--面向对象

继承关系

java的为单继承、多级继承。父类有直接父类和间接父类。最上层为Object类。
类的继承使用extends关键字。public class Child extends Parent{}
子类继承了父类的方法,重名变量和方法使用就近原则,方向为向父类方向查找。super关键字,在子类中调用父类的成员变量,方法。

 

重写方法

方法重写覆盖父类方法,使用@Overload注解,检测覆盖重写的有效性方法重写中:
子类方法的返回值必须<=父类方法的返回值范围。子类方法的权限必须[大于等于]父类方法的权限修饰符。 public > protected >(default) > private
创建新类并继承和重写满足设计需要。
子类中的构造方法,自动隐含super()的父类无参数构造方法,有参数父类构造方法手工写入调用并自动替换无参父类构造方法,父类构造方法只在子类构造方法使用调用。
说明总结,super用于父类访问,this用于本类访问。this和super的构造调用不能同时使用。

 

构造方法问题

java学习与应用(2)--面向对象_第1张图片

 

 

抽象方法与抽象类

抽象方法,在抽象类public abstract class Animal中,抽象方法格式为public abstract void eat();
不能直接创建抽象类对象,使用继承并重写抽象类中的方法。最后调用子类对象。
alt+回车,快捷创建重写抽象类方法。构造函数的调用模式以父子关系,相同。
抽象类的父类是抽象类,不一定完全重写父类所有抽象方法,但是需要使用的过程中,多次继承后必须为普通类,然后开辟空间使用。

 

接口

接口,多个类的公共规范。接口类例如:public interface 接口名称{},其中包含常量,抽象,默认,静态,私有方法。
接口中定义的方法为抽象方法。只做声明不做定义。没有方法体。[public] [abstract] 返回值类型方法名称(参数列表);
使用接口类,其子类为实现类或抽象类,使用继承方式为:public class Name implements MyIntegerfaceAbstract{},然后重写父类方法。


默认方法,[public] default void name{},用于解决父类接口升级的问题,自动让子类获取到父类的默认方法,并不需要一定重写。
静态方法,[public]  static void name{},接口中的静态方法使用接口名称调用静态方法。
私有方法private void name{},方便类内的共有方法的简化和清晰等。static可选,用在static方法,普通default的方法,使用普通私有方法。
常量格式:[public] [static] [final] 数据类型常量名称=数据值。其中灰色部分可以省略,一般是用大写和下划线格式表示常量。
类与类之间是单继承的。直接父类只有一个。类与接口之间是多实现的。一个类可以实现多个接口。
接口与接口之间是多继承的。当多个父本中的普通抽象方法相同,因没有方法实现没有冲突,而default方法,在多继承后,需要重写方法,确定该default方法的实现,避免冲突。

 

对象的动态性

对象拥有多种形态,子类对象也是父类,可使用父类方法表示。使用时存在自动向上转型的过程。
编译过程中,看左边的父类方法,以确定编译通过,在运行过程中,看右边的new对象作为其方法实现。成员变量不同,在编译和运行过程中,都以左边父类为基准。
对象的向下转型,将父类对象还原为本来的子类对象。向下转型使用小括号,类似强制转换。
多态使得设计过程中,将多个不同的对象,转换为其公共的父类对象,调用各自子类的同名方法,自动实现的向上转型,调用向下。但是向下转型才能调用本来的代码。
instanceof用于判断多态中的向上转型的合法性,避免异常。

 

final修饰符

final修饰类:public final class,声明当前类没有子类,不可修改。
final修饰方法:public final 返回值 名称{} ,声明该方法不能被覆盖重写。而abstract关键字表示该方法一定被覆盖重写。
final修饰局部变量:该变量不能修改。final修饰后只能有一次赋值。final对引用类型修饰后,该引用类型的地址变量不可改变。
final修饰成员变量:变量不可变,和局部变量的修饰不同的是,修饰成员变量需要手动赋值,不会给默认值。默认值通过构造函数或者直接赋值方案实现。

 

面向对象的内存使用问题

java学习与应用(2)--面向对象_第2张图片

 

 java学习与应用(2)--面向对象_第3张图片

 

 

修饰符与访问范围

java学习与应用(2)--面向对象_第4张图片

 

 

 

继承的内存访问

java学习与应用(2)--面向对象_第5张图片

 

 

成员内部类、匿名类

成员内部类,定义在类的内部,内部类可以访问该外部类的所有变量。创建内部类的格式:外部类.内部类 = new 外部类().内部类()
内部类访问外部类的重名变量,使用:外部类.this.变量获取。实质上内部类访问外部类的变量为常量不可改变。
局部内部类:定义在类的方法内部,在该方法中再次new出对象,用于调用该局部内部类。 内部类的外部类又相应的要求,如public 、default等
匿名内部类:接口的实现类只使用一次,则不需要单独定义。 接口 变量 = new 接口{},添加内部重写的方法。然后调用。
匿名内部类,省略了实现类,创建的对象只能使用一次。匿名对象,省略了对象名称,只能使用一次内部方法。匿名对象也常在一次性使用的场合。
 
 

你可能感兴趣的:(java学习与应用(2)--面向对象)