java学习笔记之面向对象多态

面向对象三大特性之多态

一.多态的概念

  多态是继封装,继承之后,面向对象的三大特性。

  现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态。

  java作为面向对象的语言,同样可以描述一个事物的多种形态,java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口) 变量赋值。

  父类的引用变量指向子类对象。多态的前提需要有继承关系或者是实现关系,否则没法完成多态。在使用多态后的父类引用变量调用方法时,会调用子类重写的;

二.多态的定义与使用

  多态的定义格式:就是父类的引用变量指向子类的对象;

    父类类型变量名  = new  子类对象();

    变量名.方法名();

  1.普通类的多态定义格式:

    父类类型变量名  = new   子类();

1 public class Fu {}
1 public class Zi extends  Fu{}
1 //多态使用
2 Fu  f= new Zi();

  2.抽象类多态的定义:

  抽象类变量名  =new  抽象类子类();

//抽象类
public abstract  class  Fu{

  public abstract  void method();
}
//子类
public class Zi extends Fu{

   public void method(){//重写抽象方法}
}
//多态的使用
Fu f=new Zi();

  3.接口多态定义的格式:

   接口变量名   =new   接口实现类();

  

//接口public interface  Fu{
   public abstract void method();
}
//实现类
public Zi  implements Fu{

   public void method(){
       //重写接口的抽象方法
    }
}
//多态
Fu  f=new  Zi();

注意:虽然变量指向子类的对象,但表现的是一个父类的形态,可以调用一切父类的方法,子类特有的方法将不能调用

三.多态调用的注意事项:

  编译:成员变量,成员方法都需要看父类;父类没有编译报错;

  运行:成员变量运行父类的成员变量,成员方法运行父类重写的方法

四.多态的好处与弊端

  好处:多态配合继承子类重写,提高了代码的复用性与扩展性

  弊端:不能调用子类特有的方法

五.向上向下类型转换

  多态本身是子类类型向父类类型向上转型的过程;

  1.向上转型:

    当子类的对象赋值给一个父类的引用时,便是向上转型,多态本身就是向上转型的过程

    使用格式:父类类型  变量名= new  子类类型();

  2.向下转型:

    一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类的引用转换为子类引用,这个过程是向下转型。直接创建父类对象的无法使用向下转型;

    使用格式:

    子类类型    变量名= (子类类型)  父类类型的变量;

六.instanceof 关键字

  可以通过instanceof关键字来判断某个对象是否属于某种数据类型;

  使用格式:

     boolean  b= 对象(new )     instanceof  数据类型;

原文地址:https://www.cnblogs.com/xuzhaocai/p/8111580.html

时间: 2024-12-13 13:28:00

java学习笔记之面向对象多态的相关文章

Java学习笔记<3>面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

【原】Java学习笔记019 - 面向对象

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 仔细想一想,Animal应该是一个抽象的概念,相对于Animal来说,狗才是具体的概念 6 // Animal的行为也应该算是一个抽象的行为 7 8 // Java中对于这些抽象的概念或是抽象的行为,提供了一个关键字 abstract 来进行修饰 9 10 // 关键字 abstract用在类上,

Java学习笔记--继承和多态(上)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayLis的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆盖

【JAVA学习笔记】面向对象

编程语言的发展 面向过程的设计思想 面向对象的设计思想 对象和类的概念 类之间的关系 对象和引用 Java类的定义 构造函数 对象的创建和使用 this关键字 static关键字 package和import语句 访问控制 类的继承 方法的重写 final关键字 object类 对象转型 多态 抽象类 接口 编程语言的发展 机器语言 汇编语言 高级语言–面向过程的语言 面向对象的语言 面向过程的思想和面向对象的设计思想 面向对象思维: 合适的方法出现在合适类中 在问题域中,不再考虑一步一步的过程

疯狂java学习笔记之面向对象-定义类、方法、构造器

Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. java程序中,类是最小的程序单位 - 所有的java程序都必须从定义类开始 定义类的语法格式: [修饰符]  class  类名{ //0 ~ N 个 Field 定义 //0 ~ N 个 方法定义 //0 ~ N个 构造器定义 } 一个类中最多只能出现五种成分:Field.方法.构造器 一个类最常见

【原】Java学习笔记014 - 面向对象

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 面向对象思想 6 7 // 回顾编程语言思想进化之路:从面向过程到面向对象 8 9 // 面向过程 10 // 举例: 11 // 1.冰箱门打开 12 // 2.大象放进去 13 // 3.冰箱门关上 14 // [面向过程的思路的着眼点在于动作的功能,思考打开.放入.关闭均为动作] 15 16

Java学习笔记六:多态

多态通过分离“做什么”和“怎么做”,从另一个角度讲接口和实现分离开来.多态的作用是消除类型之间的耦合关系,多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一个基类导出而来的. 1.方法参数中传入基类,可以使子类方便调用 class Instrument { public void play(Note n) { System.out.println("Instrument.play()"); } } class Wind extends Instrument {

我的java学习笔记(8)关于多态

关于多态 1.在java程序语言中,对象变量是多态的. 2.不能讲一个超类的引用赋给子类变量. 3.private方法,static方法,final方法或者构造器,那么编译器将可以准确的知道应该调用哪个方法,我们将这种调用方式称为静态绑定. 4.动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对城乡惊喜扩展. 5.在覆盖一个方法的时候,子类方法不能低于超类方法的可见性. 6.不允许扩展的类被称为final类. 7.如果将一个类声明为final,只用其中的方法自动的成为final,而