多态

Java中的继承和多态

a 夏天 提交于 2020-01-07 23:37:06
首先说一下什么是 继承 : 继承的 概念 : 将多个类中的共同代码单独提取出来,形成一个独立的类, 多个类和当前独立的类产生一种关系: 继承关系 extends 继承的 好处 : 1)提高了代码的复用性 2)提高了代码维护性 3)类和类产生这种关系,是多态的前提条件! Java中继承的 特点 : 1)在Java中,只支持单继承,不支持多继承,在别的语言可能有多继承存在多继承的语言:class 子类名 extends 父类名1,父类名2{} 2)在Java中,虽然不支持多继承,但是可以多层继承! (分层初始化:先让父类初始化再是子类初始化) 3)在Java中,所有的Java类(自己定义的,Jdk提供的)都继承自 Object类 (超类) 继承中的 注意事项 : 1)子类继承父类,只能继承父类非私有的成员(成员变量,成员方法),但是可以通过公共方法间接的访问! 2)子类不能继承父类的构造方法,但是可以通过关键字 间接访问父类的构造方法(等会讲super) 3)不要为了部分使用功能去使用"继承" 继承中 成员的组成 成员变量 构造方法 成员方法 成员变量 1)子类继承父类,子类中的成员变量名称和父类中的成员变量不一致的情况:比较简单,分别输出! 2)子类继承父类,子类中的成员变量名称和父类中的成员名称一致的情况:(重点) a)先在子类的局部位置中找,如果存在,就使用 b

继承,多态,接口等

微笑、不失礼 提交于 2020-01-07 15:27:01
一、继承 1、题目 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! TestInherits.java: class Grandparent { public Grandparent(){ System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent2 extends Grandparent{ public Parent2(){ super("Hello.Grandparent."); System.out.println("Parent Created"); // super("Hello.Grandparent."); } } class Child2 extends Parent2 { public Child2() { System.out.println("Child Created"); } } public class TestInherits {

C++ 基础知识复习(二)

▼魔方 西西 提交于 2020-01-05 04:24:21
异常处理部分: 23. 在c++的异常处理中,除了提供异常的关键字语法支持以外,其标准库中支持异常处理而封装异常类也很好的为应用程序中异常处理判断使用提供直接的帮助。C++语言中针对异常处理提供了三个关键字,分别为try、throw与catch。C++应用程序中通过这三个关键字实现机制组合来实现异常的处理。try体中可以直接抛出异常,或者在try体中调用的函数体中间接的抛出。注意catch是接thorw出来的数据的,数据类型上要兼容。 预处理及内存管理部分: 24. C语言提供的预处理功能有哪些: 答:宏定义,文件包含和条件编译。 25. include的使用方式: 答:include 如果包含的文件名在尖括号内,则为标准头文件,会在预定义的位置集进行查找。位置集可有环境变量或命令行修改。引号中为自定义头文件,查找始于源文件所在路径,一层层找直到系统文件目录。 26. 如何申请以及释放空间: 答:int *p; p=new int; *p=100; delete p; 注意如果要对这一内存地址进行操作,需要使用*号。 27. 什么是虚函数和纯虚函数: 答:虚函数用来建立抽象模型,从而达到方便系统扩展的目的,纯虚函数是指标明不具体实现的虚函数,是一种特别的虚函数。虚函数必须是基类定义的非静态函数,可以是protected活着public的。在一个类中,虚函数后面加上=0

c++中为什么可以通过指针或引用实现多态,而不可以通过对象呢?

ぐ巨炮叔叔 提交于 2020-01-03 17:28:41
目录 一、类对象的存储方式: 二、无论通过对象还是指针,能使用的方法只与它们静态类型有关。 三、 不同类型的指针有什么区别? 四、 指针与引用来实现多态 五、对象不能实现多态 引言: 在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以。 那为什么?让我们来解开这神秘的暗纱!转载自:https://www.cnblogs.com/yinheyi/p/10525543.html 一、类对象的存储方式: 在一个类的实例中,只会存放非静态的成员变量。 如果该类中存在虚函数的话,再多加一个指向虚函数列表指针—vptr。 例如声明如下两个类,并分别实例化两个对象,它们的内存分配大致如下:(vptr具体在什么位置,与编译器有关,大多数都在开始处) class base { public: virtual ~base() {}; virtual string GetName() { return "base"; } GetA(); int a; }; class derived : public base { public: virtual ~derived() {}; virtual string GetName() { return "derived";} GetB(); int b; }; base B1, B2; derived D1, D2; 内存分布大致如下:

Java入门基础—面向对象开发

萝らか妹 提交于 2020-01-03 03:13:12
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。 面向对象是Java中一门基础课程也是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。 面向对象有三大特征: 封装性、继承性、多态性。 l 封装: 隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性。 l 继承: 两种事物间存在着一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法;这就提高了代码的复用性。继承是作为多态的前提的。 l 多态: 父类或接口的引用指向了子类对象,这就提高了程序的扩展性,也就是说只要实现或继承了同一个接口或类,那么就可以使用父类中相应的方法,提高程序扩展性

java中多态的实现机制

你。 提交于 2020-01-03 03:11:37
多态的概念:   简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象。程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法。 多态存在的前提: 1、存在继承关系,子类继承父类; 2、子类重写父类的方法; 3、父类引用指向子类对象。 具体实例: 1、定义一个父类:Animal 1 package demo; 2 3 class Animal{ 4 int num = 10; 5 static int age = 20; 6 public void eat() { 7 System.out.println("动物吃饭"); 8 } 9 public static void sleep() { 10 System.out.println("动物睡觉"); 11 } 12 public void run() { 13 System.out.println("动物奔跑"); 14 } 15 } 2、子类:Cat继承Animal 1 package demo; 2 3 public class Cat extends Animal{ 4 int num=80; 5 static int age=90; 6 String name="TomCat"; 7 @Override 8 public void eat() { 9 //

java之多态的使用

别来无恙 提交于 2020-01-03 03:11:29
  首先,什么是多态?我们应该从什么角度来理解多态?其实,我们不妨把多态理解成一种事物的多种存在形态,比如,猫和狗都可以变成动物,而动物又可以变成猫和狗。 为了充分理解多态,我们可以从以下这几个方面来理解多态。 第一、从多态的体现方面:我们使用多态的时候,创建的是父类的引用,开辟的是子类的空间,由于没有开辟父类的空间,所以是父类的引用指向子类对象,并不是真正的父类自己创建了对象,而且父类对象的引用还可以作为函数参数来接收子类对象哦! 第二、多态实现的前提:必须是类与类之间要有关系,要么继承,要么实现,存在覆盖,其实就是有抽象函数。 第三、从多态的好处:大大提高程序的可拓展性 第四、多态的应用:1.父类对象的引用指向子类对象,其实本质上是一个向上转型,就像int转成double一样,儿子穿了一身爸爸的衣服,扮成了爸爸。2.但变成了爸爸之后,只能使用爸爸特有的技能,儿子怎么能够使用自己本身的技能呢?这时候就需要向下转型,脱下伪装,将父类对象的引用强转成子类类型,就可以使用子类特有的技能了。 第五、多态的弊端:提高了拓展性,但是只能使用父类的引用访问父类的成员。 ------------------------------------------------------------------------------------------例子----------------------

Java的多态浅谈

爱⌒轻易说出口 提交于 2020-01-03 03:11:17
概述 Java的四大基本特性:抽象,封装,继承和多态。其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现。如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的引用变量所指向具体类型和通过该引用变量发出的方法调用在编译的时候并不确定,而是程序运行期间才确定,就是说一个引用变量到底指向哪一个类的实例对象,该引用变量发出的方法调用哪一个类的中的方法,必须在程序运行期间才能确定。 记得大学时老师讲多态举的一个例子:上课铃响了,同学们都回各自教室上课,这就是多态。这就完了?如果是刚接触编程的同学来说,估计都懵逼了,我们那时就是这种状态。接下来我们用代码实现下老师说的意思。 多态实例 //上课铃响了public class Ring { public void ringSound() { System.out.println("我是铃声!!!"); } } 1班的同学听到铃声回去上语文课 public class ClassRoom1 extends Ring { public void ringSound() { System.out.println("classRoom1的同学听到铃声上语文了!!!"); } } 2班的同学听到铃声回去上英语课 public class ClassRoom2 extends Ring { public void ringSound

面向对象三大特征---多态

房东的猫 提交于 2020-01-02 21:36:01
这是java面对对象里的三大特性之一,今天我们讲的就是多态, 理解java的三大特性——多态对象是类的实例,而类是对象的抽象化:   面向对象编程有三大特性:封装、继承、多态。   封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。   继承:是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承,子类是一个父类。   多态:就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。   比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下: 酒 a = 剑南春 酒 b = 五粮液 酒 c = 酒鬼酒

2019年12月2日学习总结

烈酒焚心 提交于 2020-01-02 01:14:00
2019年12月2日学习总结 名词解释 静态多态 重载 重写 动态多态 即为之前所学的多态。 API 程序语言的接口 异常和错误的区别 异常:可通过Debug解决,可以避免的,可以改动的。 错误:Debug解决不了,一般为死循环或者崩溃等。 异常 try{ 这一块把异常包裹起来 } catch(捕获异常){ } 受检异常 强制使用try catch语句。 运行异常 运行时才能发现 ArithmeticException 算术异常 ClassCastException 转型异常 NullPointerException 空指针异常 ArrayIndexOutOfBoundsException 越界 大部分情况下不用管异常,异常若是受检异常,则强制要求trycatch。如果是运行异常,当发生错误时,直接解决即可。 运行时异常基本不用管(不用try catch)。 Throwable Throwable的子类是Exception和Error。 Exception的子类是Runtinue、Exception和其他异常。 try catch的运行顺序 当try块中没有异常时,跳过catch块,直接运行后面的。当try中有异常时,运行到有异常语句时,跳到catch块中。 捕获多个异常 如果在try块中,有多个不同类型的异常需要捕获。 1.直接捕获异常最上层的父类。