多态

Javaoop之封装,继承,多态

↘锁芯ラ 提交于 2020-01-16 15:41:38
封装概念:在java中通过对象实现数据和指令存储操作,该现象就属于封装行为。 体现方式: 类、对象、属性、方法 对象中属性赋值 方式: 1.对象直接赋值 语法: 对象名.属性=值; 2.通过方法赋值 实现方法: 定义一个无返回、有参数方法 //定义一个为属性赋值的方法 public void setFiled(String c,String t,double p) { color=c; type=t; price=p; } 封装·: 通过访问限定符对类,属性,方法,构造方法的可访问范围进行限定,对外提供必要的访问接口。 封装的优点: (1).良好的封装能够减少耦合。 (2).类内部的结构可以自由修改。 (3).可以对成员变量进行更精确的控制。 (4).隐藏信息,实现细节。 package com.newer.oop; public class 封装 { // 定义私有属性 private String name; private int age; private char gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void

day10_接口丶多态

折月煮酒 提交于 2020-01-16 02:09:51
接口 概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。引用数据类型:数组,类,接口。接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。 接口就是多个类的公共规范。 定义接口 根据JDK版本的不同,接口中可以定义的内容也不同。现在的接口中可以定义下列内容 格式: public interface 接口名称 {    //常量   // 抽象方法   // 默认方法   // 静态方法   // 私有方法 } 任何版本中,接口可以包含的内容有: 常量 抽象方法 定义常量 接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰。从效果上看,这其实就是接口的【常量】。 格式: public static final 数据类型 常量名称 = 数据值;

Java基础1:面向对象

一世执手 提交于 2020-01-15 19:35:06
一、面向对象和面向过程的区别 面向过程 :是站着过程的角度思考问题,按功能的先后执行顺序,用函数一步步实现功能,最后依次调用函数就可以了。面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。 面向对象: 站在对象的角度思考问题,我们把多个功能合理放到不同对象里,强调的是具备某些功能的对象。 Java面向对象的三大特性:继承、多态、封装。 二、继承 - 父类和子类的关系 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 。所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 好处:子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了实现代码的复用。 2.1 继承和实现 类只能单继承类,但可以实现多个接口。而接口只能继承接口,并且可以继承多个接口,不能使用implements关键字。 //类的单继承和多实现 public class ArrayList < E > extends AbstractList < E > implements List < E > , RandomAccess , Cloneable , java . io . Serializable //接口的多继承 public interface BlockingDeque < E > extends BlockingQueue

think_in_java_多态

此生再无相见时 提交于 2020-01-15 05:06:40
向上转型:对象既可以作为它自己本身的类型使用,也可以作为它的基类型使用。 绑定:将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定(如果有的话,由编译器和连接程序实现),叫做前期绑定。后期绑定:在运行时根据对象的类型进行绑定【动态绑定或运行时绑定】java除了static方法和final方法之外,其他所有方法都是后期绑定。 多态是一项让程序员“将改变的事物与未来的事物分离开来”的重要技术。 对象方法若是静态的,则不具备多态性。 当子类对象转型为父类引用时(Father fa=new Son();//upcast),任何域访问操作都将由编译器解析,故不是多态的。 基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用。因为构造器具有一项特殊任务:检查对象是否被正确地构造。导出类只能访问自己的成员,不能访问基类成员(private) 一个复杂对象调用构造器要遵守下面的顺序: ①调用基类构造器,这个步骤反复递归,首先是构造这种层次结构的根,然后是下一层导出类,直到最低层的导出类。 ②按声明顺序调用成员的初始化方法。 ③调用导出来构造器的主体。 当覆盖被继承类的dispose()方法时,务必记住调用基类版本dispose()方法;否则,基类的清理动作不会发生(被多态了)。 初始化的实际过程: ①在其他任何事物发生之前

Java基础——多态

て烟熏妆下的殇ゞ 提交于 2020-01-14 23:54:08
Java基础——多态 什么是多态? 从字面的意思上理解,多态就是多种形态。 同一个动作作用于不同的对象产生不同的行为 多态性指的是什么?多态性,可以理解为一个事物的多种表现形态。在Java中有两种体现: 方法的重载(overload)和重写(overwrite) 子类对象的多态性(可以直接应用在抽象类和接口上) 对象的多态性是什么?:一个对象多种形态;在Java中,子类的对象可以替代父类的对象使用 我们在之后的学习中会经常与多态打交道,比如:IO、集合、JDBC等等。 多态性有两种: 1.编译时多态性 对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性。 2.运行时多态性 如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性。 方法重写和重载的区别: 方法重写的规则 在继承关系的子类中 重写的方法名、参数、返回值类型必须与父类相同 私有方法不能继承因而也无法重写 对象转型分为: 1.向上转型 2.向下转型 instanceof运算符: 该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false 在强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性 final关键字: final关键字:代表最终的意思, 可以修饰什么? 1.修饰类 2

java个人学习笔记:多态

Deadly 提交于 2020-01-14 12:19:42
多态是面向对象中最重要的概念。 当一个对象,编译时类型和运行时类型不一致时,就会出现多态。或者说,当一个对象,使用同一个方法,却出现不同的运行状态,说明出现了多态。 多态的两种体现: 方法的重载和重写 对象的多态性(可以直接应用在抽象类和接口上) 相关概念: java中引用变量有两个类型:编译时类型和运行时类型。 编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。 对象的多态 在java中,子类的对象可以替代父类的对象使用。 一个变量只能由一种确定的诗句类型 一个引用变量可能指向(引用)多种不同的类型对象。 子类可以看作是特殊的父类,所以子类类型的引用可以指向子类的对象:向上转型。 一个引用类型变量如果申明为父类的类型,但实际引用的是子类对象,那么该变量就不能在访问子类中添加的属性和方法。 属性是在编译时确定的,所以子类是运行时的类型,添加的变量并不存在。 方法的动态绑定,方法的调用在运行时确定的。 多态的实现 需要存在继承或者实现关系。 要有覆盖操作。 成员方法,编译时:要查看引用变量所属的类是否却又调用方法。 运行时:调用实际所属的类中的重写方法。 成员变量 不具有多态性 ,只看引用变量所属的类。 instanceof 检验一个变量是为为xx的对象 return boolean 要求 比较的两个类必须是子类和父类的关系,否则编译出错。 x

Thinking in Java第八章学习笔记----多态

Deadly 提交于 2020-01-14 12:18:26
封装:   封装就是把对象的行为和属性装在一个类里。 抽象:   抽象是将存在于事物之间共同拥有的元素提取的过程,抽象成类或者接口。抽象分为:   1)数据抽象:用于表示事物的属性,比如人的姓名、年龄等。抽象成属性或者成员变量。   2)过程抽象:用于表示事物的行为,比如人会吃饭等。抽象成方法。 多态:   在面向对象程序设计语言中,多态是继封装和抽象的第三大特性。首先,须清楚多态是一种不能单独来看的特性,它只能作为类中"全景"关系中的一部分,与其他特性协同合作。多态的主要功能是将做什么和怎么做分离开来,从另一角度将接口和数据分离开来。多态不仅能改善代码的组织结构和可读性,还能创建可扩展的程序。   概括来说,多态的作用是消除耦合。没有多态,等号左边和右边需要相互对应,即耦合。有了多态,左边是父类(或者接口),右边是子类(或实现类),我只管调用接口里面的方法就是了,至于你实现类怎么去实现,那是你的事,你要修改一下实现,你只管去把实现类换掉,我这边一行代码都不用变,这就解耦了。 再论向上转型:   把导出类对象的引用视为其基类的引用,这种做法称为向上转型。因为在继承树的画法中,基类是处于上方的。 问题导出:   如果我们只写一个简单的方法,它仅接收基类引用作为参数,而不是写多个以导出类引用为参数的类似方法,并且这个方法对所有的导出类参数都可以正确运行,显然这种做法更好。 问题解决:

Java多态

谁都会走 提交于 2020-01-14 10:13:15
深入理解Java中的多态机制 在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征 引言: 多态通过分离做什么和怎么做,从还有一个角度将接口和实现分离开来。多态不但可以改善代码的组织结构和可读性。还可以创建可扩展的程序--即不管在项目最初创建时还是在须要时加入新功能时都可以“生长”的程序。 本文文件夹大纲: 一、什么是多态 二、多态的类别 三、多态的产生方式 四、 执行期多态必要条件 五、 向上转型 六、向下转型 七、 动态多态的适用范围 八、 多态的优点 1、什么是多态 多态( Polymorphism ),按字面的意思就是 “ 多种状态 ” 。 简单而通俗的说。就是一句话:同意将子类类型的 指针 赋值给父类类型的指针。 2、多态的类别 编译期多态(静态多态,早期绑定)和执行期多态(后期绑定); 绑定 :将一个方法调用同一个方法主体关联起来被称做绑定。 前期绑定 :在程序运行前绑定(由编译器和连接程序实现),称作前期绑定。它是面向过程的语言中不须要选择就默认的绑定方式。列入C仅仅有一种方法调用,那就是前期绑定。 后期绑定 :在执行时依据对象的类型进行绑定。 后期绑定也称作动态绑定或执行时绑定。 它通过某种特殊机制实现,即程序一直不知道对象的类型。可是方法调用机制调用机制能找到正确的方法体,并加以调用。 Java中除了static 方法和final 方法

Java为何需要多态机制?

强颜欢笑 提交于 2020-01-14 10:12:44
先看一个程序代码,我们通过该程序多方面揣摩Java设计者设计多态机制的由来。 1 //:polymorphism/music/Note.java 2 3 package polymorphism.music; 4 5 public ennum Note{ 6 7 MIDDLE_C,C_SHARP,B_FLAT; 8 9 } 10 11 12 13 //:polymorphism/music/Instrument.java 14 15 package polymorphism.music; 16 17 Class Instrument{ 18 19 public void play(Note n){ 20 21 System.out.print("Instrument.play()"); 22 23 } 24 25 } 26 27 28 29 //:polymorphism/music/Wind.java 30 31 package polymorphism.music; 32 33 public class Wind extends Instrument{ 34 35 public void play(Note n){ 36 37 System.out.print("Wind.play()"+n); 38 39 } 40 41 } 42 43 44 45 //

Java编程:多态和向上转型

允我心安 提交于 2020-01-14 10:11:46
以下代码为例: 1 public class Sample 2 { 3 public static void main(String [] args) 4 { 5 A a = new B(); // 父类A引用子类B的实例 6 if (a instanceof B) 7 System.out.println( " 对象 a 是类 B 的实例 " ); 8 B b = (B)a; // 向下转型 9 if (b instanceof B) 10 System.out.println( " 对象 b 是类 B 的实例 " ); 11 C c = new D(); // 父类C引用子类D的实例 12 if (c instanceof D) 13 System.out.println( " 对象 c 是类 D 的实例 " ); 14 D d = (D)c; // 向下转型 15 if (d instanceof D) 16 System.out.println( " 对象 d 是类 D 的实例 " ); 17 18 } 19 } 20 21 class A 22 { 23 } 24 25 class B extends A {} 26 class C extends B {} 27 class D extends C {} 向上转型: 1 interface A 2 { 3