Java面向对象(二)

Java面向对象(二),第1张

                       面向对象  
一、使用继承
继承是通过关键字extends实现的  格式:
class子类extends 父类{}
注意:
1、object是所用类的直接父类或间接父类;
2、如果一个成员要被子类继承之后使用,这个成员不能是private类型,因为私有的成员不能在类的外部使用,当然也不能被子类使用。
3、Java不支持多重继承,一个子类只能有一个父类,Java中可以有多层继承。
关键字super父类对象的引用
super.成员变量;
super.成员方法();
super(参数列表);
super表示当前类的直接父类。访问被子类隐藏的变量或被重写的方法,则可以通过关键字super实现相应的访问。
注意 super(title):必须写在子类构造函数的第一句,传入的参数必须和父类构造函数中的参数列表类型匹配。
Instance of 运算符 用于判断一个对象是否是某一个父类的实例对象,或者是否是某一个类的子类的实例对象。
对象名 instance of 类名;
继承的本质
优点:1、能够复用原有代码
2、可利用有的类,扩展它的属性和方法
原有的类都直接或间接继承自Java.Lang.Object
缺点:实现了类与类的高耦合性
调用父类的构造方法有如下规则:
1、在构造子类对象时,父类的构造方法一定会被调用,先被执行。
 2、如果在子类的构造方法使用了super调用父类的构造方法,则按给定的参数调用父类的相应构造方法;且写在构造器的第一行。
3、如果在子类的构造方法没有使用了super调用父类的构造方法,则父类中的无参数的构造方法会被自动调用。
4、如果在子类的构造方法没有使用了super调用父类的构造方法,并且父类中也没有定义没有参数的构造方法,则编译不能通过。
如果父类和子类都定义了初始化器,则构造子类对象时,调用顺序为:
父类的静态初始化器——子类静态初始化器——父类的初始化器——父类的构造方法——子类的初始化器——子类的构造方法
二、成员的覆盖
1、变量的隐藏

子类中定义的变量的名字与继承自父类的变量的名字相同,则在子类中隐藏了继承自父类的变量。子类中的方法不能访问父类中的被隐藏的变量。
2、方法的重写(override)
方法名、参数列表、返回类型 相同
访问权限>=父类
方法重载和方法重写的区别
1、同一个类,多个方法名相同,通过参数不同(类型、个体)来区分
2、在父类、子类中有相同的方法名、参数、返回类型的方法,子类的方法就是方法重写;
在子类中默认调用的是自己的新方法,可以通过super调用父类的方法。
上转型对象
定义: 当用父类对象表示子类对象时,父类对象称为子类对象的上转型对象。
当一个父类对象表示的是子类对象时,还可以将该父类对象强制转换成子类对象。
当用一个父类对象表示子类对象后,父类对象
1、可以访问父类的变量
2、可以调用子类继承父类的方法被子类重写的方法
3、不能访问子类特有的变量和方法
多态
多态的实现
1、定义一个基类,在此基类基础上再派生出若干个子类;
2、子类要重写父类中的方法,使子类对象能够表现出子类的行为;
3、用父类对象名表示子类对象——对象的上转型对象;
4、通过父类对象名调用被子类重写的方法。
使用多态
1、函数传入的形参可以是父类类型,而实际传入的可以是子类对象;
2、函数的返回类型是父类类型,而实际返回的可以是子类对象。
五、抽象类与接口
关键字abstract修饰的类称为抽象类
abstract class 类名
{
实例方法(){}
抽象方法;
}
[访问权限] abstract 数据类型 方法名([参数列表]);
特征
1、抽象类不能被实例化,即不能用new关键字去产生对象;
2、抽象类被子类继承,子类必须重写抽象方法;
3、抽象方法只需要声明,不需要实现(无方法体);
4、抽象类中可以有非抽象方法,也可以有抽象方法(如果一个类中有抽象方法,该类必须定义成抽象类)。
注意
1、抽象方法只有方法的头部,没有方法体。抽象方法一定不能用关键字final修饰。
2、抽象函数必须被重写,除非子类也是抽象类;
3、在抽象类中可以含有普通成员函数。
抽象类和抽象方法的联系
1、如果类中有抽象方法,则此类必须是抽象类;
2、如果是抽象类,可有可无抽象方法;
3、抽象类不能创建对象——必须有子类继承抽象类/继承抽象类的子类,必须重写父类中的抽象方法。
接口 是对抽象类的进一步抽象  在Java中单继承,多接口
格式如下
[修饰符]interface接口名[extends 父类.接口列表]
{
[public][static][final]数据类型 变量名=常量值;
[public][abstract]返回值类型 方法名(参数列表)‘
}
实现接口,格式如下
{
成员变量和成员方法;
重写接口A中的所有方法;
重写接口B中的所有方法;
}
实现接口的多态性,使用接口回调技术
接口名 对象名=new 实例类构造方法();
注意
接口不能实例化;
常量+抽象方法(只有声明,没有实现);
这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
关键字final
  final 可以修饰类,修饰类中的方法,还可以修饰变量。
1、final 常量
[访问限定词][static] final数据类型 变量名=初值;
2、final 修饰方法
[访问权限][static] final 方法类型 方法名([参数])
{
//...
}
3、final 修饰类(最终类)
final class 类名
{
//...
}
最终类不能派生子类,典型的最终类就是String类。
注意
最终方法可以被子类继承,但不能被子类重写,从而对父类的方法起保护作用;
final 成员变量必须在声明时或在构造函数中显式赋值才能使用。一般情况下,在定义时就进行赋值。

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/786568.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存