Java-面向对象(高级篇)--对象的多态性
- 格式:docx
- 大小:15.82 KB
- 文档页数:5
一丶封装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)子类继承父类,父类中声明的属性,方法,子类都可以获取到;当父类中有私有的属性方法时,子类同样可以获取到,由于封装性的设计,使得子类不能直接调用访问。
java⼊门第四篇-⾯向对象的三个基本特征;⾯向对象的三个基本特征:封装,继承,多态; 封装:将属性私有化,不允许外部数据直接访问,并设置相应的⽅法对属性进⾏设置和读取,从⽽实现对属性访问的限制。
这种限制属性访问的操作叫做封装。
通俗理解就是将属性封在⼀定的范围内,只能在给定的条件内取值。
如下代码⽰例,可以实现对限制年龄的取值。
private int age;public void setAge(int age){if(age>0&&age<120){this.age=age;}else{System.out.println("年龄输⼊不合法");this.age=-1;}}public int getAge(){return this.age;} 继承:将多个类公⽤的属性和⽅法写在⽗类⾥,⼦类使⽤extends关键字继承⽗类,就可以使⽤⽗类⾮私有化的属性和⽅法。
public class ColorPrinter extends Printer{} 1.使⽤继承可以:1.提⾼代码的复⽤性,⼦类可以调⽤⽗类⾮私有的属性和⽅法,不⽤再次编写。
2.提⾼代码的维护性。
3.将类与类联系起来,是多态的前提。
2.⼦类需要访问⽗类成员,使⽤super关键字。
super.属性访问⽗类属性; super.⽅法访问⽗类⽅法。
如果⼦类中没有同名的属性和⽅法覆盖⽗类,则依然可以直接使⽤this.属性直接调⽤从⽗类中继承的⾮私有属性。
但是⼦类中如果重写了与⽗类同名的属性,this.属性访问的是本类属性。
super.属性访问的是⽗类属性(⾮私有)。
在⼦类构造中,如果使⽤super(属性名,属性名,属性名);表⽰调⽤⽗类的函数,⽽且super()函数必须在⼦类的第⼀⾏。
super关键字,⽆法访问⽗类的私有属性和私有⽅法。
public class Piano extends Instrument {public Piano() {super();}public Piano(String brand,int weight,String size) {super(brand,weight);}}3.⼦类可以访问⽗类的属性和⽅法的种类。
面向对象的方法有哪些面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将问题分解为对象,并通过对象之间的交互来解决问题。
在面向对象编程中,我们使用类(class)和对象(object)来组织和管理代码,从而实现代码的封装、继承和多态。
面向对象的方法有以下几种:1. 封装(Encapsulation):封装是面向对象编程的基本特征之一。
它指的是将相关的属性和行为(方法)组合在一起,形成一个对象。
封装可以隐藏对象的内部细节,只提供一些外部接口,从而提高代码的可维护性和重用性。
2. 继承(Inheritance):继承是面向对象编程的另一个重要特征。
它通过创建一个新的类(子类)来继承已有类(父类)的属性和方法。
子类可以继承父类的所有非私有成员,并且可以添加自己的成员。
继承可以实现代码的重用和扩展。
3. 多态(Polymorphism):多态是面向对象编程的核心概念之一。
它指的是同一个类的实例在不同的情况下表现出不同的行为。
多态的实现方式包括函数重载和函数重写。
多态可以提高代码的灵活性和可扩展性。
4. 抽象(Abstraction):抽象是将具体的事物抽象成一般性的概念或模板。
在面向对象编程中,抽象是通过接口(interface)和抽象类(abstract class)来实现的。
接口定义了一组方法的签名,抽象类则提供了部分或者完整的方法实现。
抽象可以帮助我们定义通用的行为,并且使得程序具有更高的可复用性。
5. 组合(Composition):组合是指通过将一个类的对象作为另一个类的成员来组合两个类的关系。
组合可以实现部分和整体之间的关系,从而提高代码的灵活性和可维护性。
6. 封装(Encapsulation):封装是将对象的属性和方法封装起来,以隐藏内部实现的细节。
通过封装,对象对外只暴露有限的接口,隐藏了实现的细节,并且可以添加必要的验证和保护机制,提高代码的可靠性和安全性。
重载和多态的区别多态性也是面向对象方法的一个重要特性.多态性是指在在程序中出现的"重名"现象,即在一个程序中相同的名字可以表示不同的实现.在JAVA中,多态性主要表现在如下两个方面:1方法重载.通常指在同一个类中,相同的方法名对应着不同的方法实现,但是方法的参数不同.2成员覆盖.通常指在不同类父类和子类中,允许有相同的变量名,但是数据类型不同;也允许有相同的方法名,但是对应的方法实现不同.在重载的情况下,同一类中具有相同的名字的方法.如何选择它的方法体呢?不能使用类名来区分,通常采用不同的方法形参表,区分重载要求形参在类型,个数和顺序的不同,在定义重载方法时,应在方法的形参的类型,个数和顺序有所不同,以便在选择时能够区别开来.在覆盖的情况下,同名的方法存在于不同的类中,在调用方法只要指明其方法所归属的类名就可以了.例如class Shape {void draw {}void erase {}}class Circle extends Shape {void draw {System.out.println"Circle.draw";}void erase {System.out.println"Circle.erase"; }}class Square extends Shape {void draw {System.out.println"Square.draw";}void erase {System.out.println"Square.erase";}}class Triangle extends Shape {void draw {System.out.println"Triangle.draw";}void erase {System.out.println"Triangle.erase";}}public class Test {public static Shape randShape {switchintMath.random * 3 {default:case 0: return new Circle;case 1: return new Square;case 2: return new Triangle;} }public static void mainString[] args {Shape[] s = new Shape[9];forint i = 0; i < s.length; i++ s[i] = randShape;forint i = 0; i < s.length; i++ s[i].draw;}}输出结果Triangle.drawCircle.drawTriangle.drawTriangle.drawTriangle.drawSquare.drawSquare.drawTriangle.drawCircle.drawTriangle.eraseCircle.eraseTriangle.eraseTriangle.eraseTriangle.eraseSquare.eraseSquare.eraseTriangle.eraseCircle.erasePress any key to continue...又一次执行Triangle.drawTriangle.drawCircle.drawCircle.drawCircle.drawTriangle.drawTriangle.drawSquare.drawCircle.drawTriangle.eraseTriangle.eraseCircle.eraseCircle.eraseCircle.eraseTriangle.eraseTriangle.eraseSquare.eraseCircle.erasePress any key to continue...两次执行结果不同的原因是其中的Math.random这个类导致的,math.random得到的数是0-1之间的随机数.写到这里,我突然想到了方法重载,那么它和多态,覆盖有什么区别呢?到GOOGLE是搜素了一下,不少.不过,最重要的一点区别是:通过方法重载进而实现对象的多态性.方法重载是指功能相同的多个方法使用同一个方法名.同名的多个方法的参数要有所不同,即在参数类型,参数个数和参数顺序上要有所区别,以便作为选择某个方法的根据.通常只有功能相同的方法进行重载才有意义.例如:计算两个数之和的重载方法定义如下:int addint i,int j{retrun i+j;}float addfloat i,float j{retrun i+j;}double adddouble i,double j{retrun i+j;}重载方法的选择通常是在编译时进行.系统根据不同的参数类型,个数或顺序,寻找最佳匹配方法.方法类型不参与匹配.下面是搜到的一些例子.public class Base{int a,b;public Baseint x,int y{a = x;b = y;}public int add{return a + b;}public void addint x,int y{int z;z = x + y;}}上面这段代码就是重载~~~他有三个特征1:方法名必须一样“add“。
Java的面向对象编程思想Java是一门流行的编程语言,其被广泛应用于各种领域。
与其它编程语言相比,Java有其独特的面向对象编程思想。
面向对象编程强调的是程序的对象,而不是程序的函数或指令。
这种编程思想使得Java在软件开发中越发重要。
一、什么是面向对象编程思想?在Java编程中,面向对象编程思想是基础。
面向对象编程(OOP)是一种程序设计模式,其中程序看作是一系列对象,每个对象都可以接收数据、处理数据和传递数据。
OOP将数据和方法捆绑在一起,使得数据和方法能够共同操作,对象有助于降低软件的复杂性并强化代码的重用性。
二、Java的基础数据类型Java有两类数据类型:基本数据类型和引用数据类型。
基本数据类型代表的是单一值,例如布尔型、字符型、整型和浮点型。
引用数据类型代表的是对现实世界中的事物进行的抽象。
这些事物可以指对象、集合和数组等复杂的数据结构。
三、Java的面向对象编程实现Java编程中,作为程序员,首先要学会如何写类。
一个类表示了一个对象的行为和属性,同时还定义了该对象的方法。
例如,我们可以定义一个名为Person_class的类,其中包含属性name、age和gender。
我们还可以定义一个set_name()方法来设置该对象的name属性。
Java通过继承实现代码重用。
通过继承,子类可以从父类继承属性和方法。
这使得代码可重用性更高。
子类可以通过继承获得父类的方法,并且还可以添加新的方法和属性。
Java中,一个类只能继承一个父类,但是可以实现多个接口。
Java还支持多态。
Java中,多态指对象可以具有多种形式,可以是父类或子类的对象。
这使得代码可以更加灵活。
多态性可以通过向上转型、方法重载和方法覆盖来实现。
四、Java的封装封装是OOP的基本概念之一,它是指隐藏对象的内部细节,同时只提供公共API以供外部使用。
Java中的封装通常通过访问控制符来实现。
Java的访问控制符有public、private、protected和default。
尚硅谷面试题尚硅谷是一家知名的IT培训机构,提供高质量的编程教育和就业服务。
作为一名学员或者准备面试的应聘者,了解尚硅谷的面试题目是非常重要的。
本文将为大家介绍几道尚硅谷的常见面试题,并且给出详细的解答和思路分析。
面试题一:谈谈Java中的多态性?思路分析:多态性是面向对象编程的重要特性之一,也是Java语言中常见的面试题目。
多态性通过继承和接口实现,实现了父类引用可以指向子类对象的特点。
在面试中,可以从多个角度来回答这个问题,包括多态的定义、实现方式、优点和应用场景等。
解答:多态性是指同一类型的变量,在不同的对象实例上表现出不同的行为。
在Java中,多态性通过继承和接口实现。
通过继承,我们可以定义一个父类,然后派生出多个子类,这些子类都拥有父类的属性和方法。
通过接口,我们可以定义一组规范,然后多个类实现这个接口,根据实现类的不同,调用相同的接口方法会得到不同的结果。
多态性的主要优点是增加代码的灵活性和可扩展性。
通过使用父类引用指向不同的子类对象,我们可以在运行时动态地选择调用哪个子类的方法,从而实现了代码的灵活性。
另外,当需要添加新的子类时,我们只需要继承或者实现相同的父类或接口,而不需要修改原有的代码,从而实现了代码的可扩展性。
多态性适用于很多场景,比如通过一个统一的接口来操作不同的实现类,实现代码的解耦和通用性;通过将子类对象当作父类对象使用,提高代码的灵活性和可维护性等。
但是需要注意,在进行多态操作时,需要保证父类引用指向的对象是其子类对象,否则会出现类型转换异常。
面试题二:谈谈Java中的异常处理机制?思路分析:异常处理是Java编程的重要部分,良好的异常处理能够提高程序的健壮性和容错性。
在面试中,可以从异常的概念和分类、处理方法、异常处理的最佳实践等方面来回答这个问题。
解答:在Java中,异常是指程序在运行时遇到的意外事件或错误条件。
异常分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。