继承,多态..

“是一个”与“有一个”
继承关系 ,和拥有关系一定要搞清楚啊,兄弟。
IS A用测试继承关系 。这个是单向的。
例1、狗是动物,反过来不能成立,“动物是狗”不能成立,这就是单向。
例2、狗是狗,反过来还是“狗是狗”。这就是双向,这样就错了。

重载版的方法只是刚好有相同名字的不同方法 。

抽象类代表没有人能够创建出该类的实例。你还是可以使用抽象类来声明为引用类型给
多态使用。

抽象类除了被继承过之外,是没有用途,没有值,没有目的

如果你声明出一个抽象的方法,就必须将类也标记为抽象的。你不能在非抽象类中拥有抽象方法。

抽象的方法定义出一组子型共同的协议

把父类型作为方法的参数,就是一种多态。

抽象的方法没有内容,它只是为了标记出多态而存在。

一、现在一个动物类,分别 有dog ,wolf ,lion继承它。

package lhs.learn;

public abstract class Animal
{
    public String colour = "red";
    public void move()
    {
        System.out.println("I am move");
    }

    public void sound()
    {
        System.out.println("I am sound");
    }

    public abstract void eat();

}
package lhs.learn;

public class Dog extends Animal
{
    public void action()
    {
        System.out.println("忠诚!");
    }

    public void sound()
    {
        System.out.println("汪汪汪...");
    }

    public void eat()
    {
        System.out.println("吃骨头..");
    }

}

public class Wolf extends Animal
{
    public void action()
    {
        System.out.println("一群群的");
    }

    public void move()
    {
        System.out.println("I am fast move");
    }

    public void sound()
    {
        System.out.println("嗷呜嗷呜...");
    }

    public void eat()
    {
        System.out.println("吃兔子..");
    }

}

public class Lion extends Animal
{
    public void action()
    {
        System.out.println("狮子吼!");
    }

    public void sound()
    {
        System.out.println("吼吼吼吼..");
    }

    public void eat()
    {
        System.out.println("吃其它动物..");
    }

}

2、调用类。

package lhs.learn;

/*
 * 多态
 * 通过多态,你就可以编写出引进新型子类时也不必修改的程序。
 *
 * */

public class Index
{

    public static void main(String[] args)
    {
        Animal[] animals = new Animal[3];
        animals[0] = new Dog();
        animals[1] = new Wolf();
        animals[2] = new Lion();

//        animals[0].move();
//        animals[1].move(); // 把子类当作总父类操作。

//        Wolf temp = (Wolf)animals[1];
//        temp.action();

        Index index = new Index();
        index.makeSound(new Dog());
        index.makeSound(new Wolf());

    }

    //以后不管增加多少动物鸡,鸭,鱼什么 的,这个方法 都不用改,因为它用了多态哦。
    public void makeSound(Animal animal)
    {
        animal.sound();
    }

}
时间: 2024-08-24 08:08:24

继承,多态..的相关文章

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

No2_4.接口继承多态_Java学习笔记_经典案例

1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List; 4 5 /** 6 * @title 接口继承多态的经典范例 7 * @author 作者:sunshine yaqingl 8 * @date 创建时间:2016年7月6日 下午5:27:39 9 */ 10 11 //使用Comparable接口自定义排序 12 class Employee implements Com

java基础之【继承--->多态】内存图

执行流程 1:Animal a = new Cat(); 1.1:在栈中创建区域,类型为Animal,变量名:a; 1.2:在堆中new Cat();占用一块区域.地址值:[0x3a4] 1.3:spuer()实例化父类Animal. 1.3.1:new Animal();占用一块区域,地址值:0x3ab; 1.3.2:引用着在方法区中初始化[Animal中的所有方法,该引用为:[0x754]]. 1.3.3:将Animal()引用赋给spuer();spuer引用着Animal(); 1.4:

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

python面向对象之继承/多态/封装

老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print("开动啦.") class Benz(Vehicle

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E