第一范文网 - 专业文章范例文档资料分享平台

使用java实现面向对象编程

来源:用户分享 时间:2025/8/16 18:31:14 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

2.继承关系中构造方法的执行顺序

4.抽象类

1.抽象类和抽象方法的特点

(1)抽象类和抽象分都通过abstract关键字来修饰。

(2)抽象类不能实例化。抽象类中可以没有、有一个或者多个抽象方法,甚至全部都可以是抽象方法。

(3)抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重新所有抽象方法才能实例化,否则子类还是一个抽象类。

抽象类:public abstract class Pet {

}

//抽象方法 //属性

问题:抽象类可有构造方法吗?

解答:抽象类可以有构造方法,其构造方法可以被本类的其他构造方法调用,若此构造方法不是有private修饰,也可以被本类的子类中类构造方法调用。

5.Final 修饰符 1.Final 的应用

(1)、用final 修饰类,不能再被继承,如以下代码所示。

Final class penguin{

Class SubPenguin extends Penguin{//此行出现错误

} }

(2)、用final修饰符的方法不能被子类重写,如: Class penguin{

Public final void print(){} }

提示错误:The type SubPenguin cannot subclass the final class,即Penguin类不能被继承。

Class SubPenguin extends Penguin{

Public void print(){}//此行出现错误 }

提示错误:cannot override the final method from Penguin ,即print()方法不能被子类重写。 (3)、用final修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次,如:

Public class penguin{

Final String home=”南极”; //居住地 Public void setHome(String name){

This.home=home; //错误,home不可以再次赋值 } }

提示错误:The final filed Penguin.home cannot be assigned,即不可以再次赋值。

2.final和abstract的区别

? final 和abstract是功能相反的两个关键字,可以对比记忆。 ? abstract可以用来修饰类和方法,不能用来修饰属性和构造方法。 Final可以用来修饰类、方法和属性,不能修饰构造方法。

? Java 提供的很多类都是final类,如String 类、Math类,它们不能再有

子类。Object类中一些方法,如getClass()、notify()、wait()都是final方法,只能被继承而不能被重写,但是hashCode()、toString()、equals(Object obj)不是final方法,可以重写。

使用final修饰引用型变量时,变量的值时固定不变的,而变量所指向的对象属性值时可变的。

(2)abstract是否可以和private、static、final共用? (1) abstract不能和private同时修饰一个方法。 (2) abstract不能和static同时修饰一个方法。 (3) abstract不能和final同时修饰一个方法或类。

第三章、多态

1.什么是多态

多态(polymorphism)是具有多种形态的能力的特征。(同一个实现接口,使用不同的实例执行不同的操作。)(其核心是重写,核心机制是动态绑定) 子类到父类的转型(向上转型)

在引用数据类型的子类和父类之间也存在着转换问题,

Dog dog=new Dog(“欧欧”,”雪丽娜”); //不涉及类型转换 Dog.eat();

Pet pet=new Dog(“欧欧”,”雪丽娜”); //子类到父类的转换

Pet.eat(); //会调用dog类重写eat()方法,而不是Pet类的eat()方法 Pet.catchingFlyDisc(); //编译错误,父类的引用无法调用类特有的方法

? 将一个父类的引用指向一个子类对象,称为向上转型(upcasting),自动进行类型转换。 ? 此时通过父类引用变量调用的方法是子类覆盖或继承的方法,不是父类的方法。 ? 此时通过父类引用变量无法调用子类特有的方法。

2.使用父类作为方法形参实现多态

是Java中实现和使用多态的主要方法之一。

/*

* 主人给Dog喂食 */

public void feed (Dog dog){ dog.eat(); } /**

* 主人给Penguin喂食 */

public void feed(Penguin pgn){ pgn.eat(); }

多态的明显优势:可以减少代码量,提高代码的可扩展性和可维护性。

3.使用父类作为方法返回值实现多态

是Java中实现和使用多态的另一种方式。

public class Master {

private String name =\; //主人名字 private int money=0; //元宝数 public Master(String name ,int money){ this.name=name; this.money=money; }

public void feed(Pet pet){ pet.eat(); }

public Pet getPet(int typeId){ Pet pet=null; if(typeId==1){

pet=new Dog(\欧欧\,\雪娜瑞\); }else if(typeId==2) {

pet=new Penguin(\楠楠\,\妹\); }

return pet; }

1.总结:

? 继承的存在(继承是多态的基础,没有继承就没有多态)。 ? 子类重写父类的方法(多态下调用子类重写后的方法)。 ? 父类引用变量指向子类对象(子类到父类的类型转换)。

4.父类到子类的转换(向下转型)

父类到子的转换。同时,会使用instanceof运算符来判断对象的类型。 将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。

调用不同的宠物子类对象的特有方法,在预编译阶段,虚拟机对引用采用静态绑定,没有办法动态获取到子类中特有的方法。

public class Test {//

public static void main(String[] args) { Pet pet =new Dog(\欧欧\,\雪娜瑞\); //Pet pet=new Penguin(\楠楠\妹\ pet.eat();

//pet.catchingFlyDisc();//编译错误,无法调用子类特有的方法 if(pet instanceof Dog){

Dog dog=(Dog) pet; //强制类型转换成狗对象

搜索更多关于: 使用java实现面向对象编程 的文档
使用java实现面向对象编程.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6xttp6usqv92i2o9mdi8_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top