类的继承性和多态性
- 格式:docx
- 大小:264.43 KB
- 文档页数:6
【Java】⾯向对象的四个基本特征:唯⼀性、分类性、继承性
和多态性
1.唯⼀性
唯⼀性是指每个对象都是唯⼀的,具有唯⼀标识符。
在对象的整个⽣命周期中,标识符是⼀成不变的,系统可通过该标识符,在内存中找到相应对象。
2.分类性
分类性是指将具有⼀致属性和⾏为的对象抽象成类,只保留与应⽤有关的性质,其他内容忽略。
任何类的划分都是主观的,但必须与具体应⽤有关。
3.继承性
继承性是指⼦类⾃动继承⽗类的属性和⽅法,并且可以在⽗类的基础上加⼊若⼲新内容。
例如,“⼈”这个类抽象了这个群体的基本特征,⽽“学⽣”和“⽼师”除了具备“⼈”所定义的基础特性外,各⾃⼜具有各⾃的新特性。
继承性是⾯向对象程序设计语⾔不同于其他语⾔的最重要特点。
通过类的继承,可使公共的特性能够共享,提⾼代码的可重⽤性、减少冗余,同时简化了对象、类的创建⼯作,规范了类的等级结构。
4.多态性
多态性是指不同对象,在收到同⼀消息后,可产⽣不同结果,具有不同表现⾏为。
多态性允许每个对象以⾃⾝的⽅法去响应共同消息,以此增强软件的灵活性和可重⽤性。
类的四个基本特征
类的四个基本特征是:封装性、继承性、多态性和抽象性。
1. 封装性(Encapsulation):将数据和对数据的操作封装在一起,通过定义类的成员变量和成员方法,隐藏内部实现的细节,提供接口供外部访问和操作。
封装性能够提高代码的可维护性和可复用性,同时也能够保护数据的安全性。
2. 继承性(Inheritance):通过继承关系,一个类可以继承另一个类的属性和方法,从而实现代码的重用和扩展。
子类可以继承父类的成员变量和成员方法,并可以增加自己的特有成员变量和成员方法。
继承性能够提高代码的可扩展性和可维护性。
3. 多态性(Polymorphism):多态性是指一个对象可以有多种形态,在不同的情境下表现出不同的行为。
通过多态性,可以使用父类的引用指向子类的对象,从而调用子类的方法。
多态性能够提高代码的灵活性和可读性。
4. 抽象性(Abstraction):抽象性是指通过抽象类或接口定义出一组相关的属性和方法,而不关注具体的实现细节。
抽象类和接口可以定义出一种规范和契约,供其他类实现和使用。
抽象性能够提高代码的可扩展性和可维护性。
Java 父类方法的使用场景和优势
Java 父类方法是一种在子类中重写或覆盖的方法,其目的是在
子类中提供一些额外的功能或行为,同时又允许子类根据自己的需要选择是否使用这些功能或行为。
在 Java 中,父类方法通常用于实现类的继承和多态性。
Java 父类方法的使用场景如下:
1. 实现类的继承:Java 中的类可以继承其他类,而父类方法可
以用来实现类的继承。
当一个子类继承了一个父类,子类就可以重写或覆盖父类方法,以实现自己独特的行为。
2. 实现多态性:Java 中的多态性指的是同一个方法可以在不同
参数类型和参数数量的情况下被调用。
父类方法可以用来实现多态性,从而让子类根据自己的需要选择是否使用这些方法。
3. 提供额外的功能或行为:Java 父类方法可以用来提供额外的
功能或行为,这些功能或行为可以在子类中重写或覆盖以满足不同的需求。
例如,一个类可以使用父类方法来实现文件读写操作,让子类可以选择是否实现这些操作。
Java 父类方法有很多优势。
首先,它实现了类的继承和多态性,让子类可以有自己的独特行为。
其次,它提供了额外的功能或行为,让子类可以根据需要选择是否实现这些功能或行为。
最后,父类方法可以减少代码的重复,让代码更加简洁和易于维护。
在 Java 中,父类方法是一种非常有用的技术,可以用来实现类的继承和多态性,并提供额外的功能或行为。
使用父类方法可以让代
码更加简洁和易于维护,同时也可以减少代码的重复。
一丶封装1 权限修饰符可以用来修饰成员变量和成员方法,对于类的权限修饰只可以用public和缺省default。
被public修饰的类可以在任意地方被访问;default类只可以被同一个包内部的类访问。
权限由大到小:public protected default(不写) private被private修饰的成员只能在本类中访问,外界不能访问2 set()/get()方法(1)this关键字a.可以用来调用变量,方法,构造方法;b.this.xx 理解为调用当前类的xx。
(2)成员变量和局部变量1)在类中的位置不同a:成员变量:在类中,方法外b:局部变量:在方法声明上(形式参数),或者是在方法定义中2)在内存中的位置不同a:成员变量:在堆内存b:局部变量:在栈内存3)生命周期不同a:成员变量:随着对象的创建而存在,随着对象的消失而消失b:局部变量:随着方法调用而存在,随着方法的调用结束而消失4)初始化值不同a:成员变量:有默认值b:局部变量:必须初始化值,否则报错!(在使用它之前,没有初始化) (3)set()/get()方法当成员变量被private修饰时,不在本类中无法直接访问,便需要set()/get()方法来解决这个问题3 封装性封装:是面向对象的第一大特性,所谓封装,就是值对外部不可见(一般而言被private修饰),外部只能通过对象提供的接口(如set()/get()方法)来访问。
封装的好处:a.良好的封装能够减少耦合;b.类内部的结构可以自己修改,对外部影响不大;c.可以对成员进行更精准的控制(防止出现与事实不符的情况);d.影藏实现细节。
注意:在开发中,类的成员变量全部要进行封装,封装之后通过set()/get()方法访问。
二丶继承extends1 实现:通过 class Zi extends Fu{} 实现类的继承(1)子类继承父类,父类中声明的属性,方法,子类都可以获取到;当父类中有私有的属性方法时,子类同样可以获取到,由于封装性的设计,使得子类不能直接调用访问。
类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。
多态的基础是继承(包括了接口的实现)和方法的覆盖。
什么是多态多态对应的英文单词是polymorphism,百度翻译给出的翻译是:n.多型现象,多态性; 多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。
那是什么东西呢?在面向对象的编程语言里面(当然就包括Java了)就是某个方法或函数。
那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。
而方法的相同与否是由方法签名决定的。
所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。
状态、形态、姿态指的就是行为特征。
多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。
所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。
而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。
所以,这两个类肯定是有某种联系的。
我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的?答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。
比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。
例子不是很恰当,但意思就是这么个意思。
所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。
简述面向对象的特点
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序中的数据和操作数据的方法组合成一个对象,以此来描述现实世界中的事物和概念。
面向对象编程具有以下特点:
1. 封装性:封装是指将数据和方法封装在一个对象中,对外部隐藏对象的内部实现细节,只暴露必要的接口。
这样可以保证数据的安全性和一致性,同时也方便了代码的维护和重用。
2. 继承性:继承是指一个类可以继承另一个类的属性和方法,从而减少代码的重复性。
子类可以重写父类的方法,也可以添加自己的方法和属性,从而实现更加灵活的功能。
3. 多态性:多态是指同一个方法可以根据不同的对象调用出不同的行为。
多态可以提高代码的可扩展性和可维护性,同时也可以提高代码的可读性和可理解性。
4. 抽象性:抽象是指将具有相似特征的对象抽象成一个类,从而减少代码的重复性。
抽象类和接口是面向对象编程中的重要概念,它们可以定义一些方法和属性,但是不能被实例化,只能被子类继承或实现。
面向对象编程的特点使得它在软件开发中得到了广泛的应用。
它可以提高代码的可重用性、可扩展性和可维护性,同时也可以提高代码的可读性和可理解性。
面向对象编程可以应用于各种领域,如游
戏开发、Web开发、桌面应用程序开发等。
随着计算机技术的不断发展,面向对象编程也在不断地演化和发展,如面向方面编程(Aspect-Oriented Programming,AOP)、面向服务编程(Service-Oriented Programming,SOP)等。
java的封装,继承和多态类和对象类类声明 { 成员变量的声明; 成员方法的声明及实现; }声明类:[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]声明成员变量:[修饰符]数据类型 变量[=表达式]{,变量[=表达式]}成员方法声明:[修饰符]返回值类型 方法([形式参数列表])[throws 异常类列表]{语句序列;[return[返回值]]; }重载:一个类中可以有多个同名的成员方法,前提是参数列表不同,称为类的成员方法重载,重载的多个方法为一种功能提供多种实现。
重载方法之间必须以不同的参数列表(数据类型、参数个数、参数次序)来区别。
例如,MyDate 类可声明多个重载的set()方法如下: void set(int y,int m, int d)void set(int m, int d) //重载方法,参数个数不同void set(int d) void set(MyDate date)//重载方法,参数的数据类型不同对象对象声明:类 对象构造实例:对象 = new 类的构造方法([实际参数列表])引用对象的成员变量和调用成员方法:对象.成员变量 对象.成员方法([实际参数列表])类的封装性构造与析构类的构造方法用于创建类的一个实例并对实例的成员变量进行初始化一个类可声明多个构造方法对成员变量进行不同需求的初始化,构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。
例:MyDate类声明以下构造方法:public MyDate(int year, int month, int day)// 声明构造方法,方法名同类名,初始化成员变量 {set(year, month day);// 调用 set()方法,为成员变量赋值}使用new运算符调用指定类的构造方法,实际参数列表必须符合构造方法声明。
例如:MyDate d1 = new MyDate(2017,10,1);//创建实例并初始化成员变量当一个类没有声明构造方法时,Java 自动为该类提供一个无参数的默认构造方法对象的引用与运算this引用访问本类的成员变量和成员方法:this.成员变量,this.成员方法([实际参数列表])调用本类重载的构造方法:this([实际参数列表])访问控制类的访问控制权限公有和(public)和缺省类中成员4级访问控制权限及范围声明set()和get()方法存取对象的属性例:public void set(int year, int month, int day) //设置日期值 public void set(MyDate date)//设置日期值,重载 public int getYear()//获得年份 public int getMonth()// 获得月份 public int getDay()//获得当月日期静态成员定义及访问格式使用关键字static声明的成员称为静态成员在类内部,可直接访问静态成员,省略类名。
继承、多态,重载、重写的区别与总结李氏原则:(1)父类的引用指向子类对象。
-多态(2)接口的引用指向实现类的实例。
-接口Polo咯,什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承、多态、重载和重写继承(inheritance)简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型。
继承是面向对象的三个基本特征--封装、继承、多态的其中之一,我们在使用JAVA 时编写的每一个类都是在继承,因为在JAVA语言中,ng.Object类是所有类最根本的基类(或者叫父类、超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么JAVA就会默认为它是继承自Object类的。
我们可以把JAVA中的类分为以下三种:类:使用class定义且不含有抽象方法的类。
抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法。
接口:使用interface定义的类。
在这三种类型之间存在下面的继承规律:类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
接口只能继承(extends)接口。
请注意上面三条规律中每种继承情况下使用的不同的关键字extends和implements,它们是不可以随意替换的。
大家知道,一个普通类继承一个接口后,必须实现这个接口中定义的所有方法,否则就只能被定义为抽象类。
我在这里之所以没有对implements关键字使用“实现”这种说法是因为从概念上来说它也是表示一种继承关系,而且对于抽象类implements接口的情况下,它并不是一定要实现这个接口定义的任何方法,因此使用继承的说法更为合理一些。
南京信息工程大学实验(实习)报告
实验(实习)名称类的继承性和多态性实验(实习)日期得分指导教师陈遥
系计算机专业网络工程年级 2014 班次 2 姓名刘信言学号 20142346074
一、实验目的
1.掌握Java语言的类的继承的概念。
2.掌握Java语言中抽象类的使用。
3.掌握Java语言中接口的使用
二、实验内容及步骤
1.类的继承,具体要求如下:
(1)定义一Person类,该类具有属性人名、年龄、身份证号等信息以及将属性信息作为字符串返回的
方法;
(2)定义一Student类,让该类继承Person类,该类除了具有属性人名、年龄、身份证号等信息以外还有学号,所在学校等信息;该类也具有将属性信息作为字符串返回的一方法;
(3)编写测试类,测试这两个类
【源程序】
【运行效果图】
2.定义一个动物抽象类Animal,该类有一个抽象的方法cry();定义一个小猫类Cat,该类继承了Animal 类并实现了cry()方法,当调用cry()方法时打印“小猫喵喵叫”,定义一个小狗类Dog,该类也继承了Animal类并实现了cry()方法,当调用cry()方法时打印“小狗汪汪叫”。
【源程序】
【运行效果图】
3. 接口的运用。
定义一接口接口名叫Usb,该接口声明了两个方法分别为start()和stop()方法,定义一U盘类UsbDiskWriter,一照相机类Camera、一手机类Mobile,让它们都实现该接口。
【源程序】
【运行效果图】
五、结果分析
1. 子类若想调用父类的构造函数必须要用super关键字。
2.接口体中只能运用抽象类。
3.在同一个java文件中只能在入口函数的类中用public。