Java学习笔记(十)——多态

一、多态

1、对象的多种形态

(1)引用多态:

父类的引用可以指向本类的对象

父类的引用可以指向子类的对象

(2)方法多态:

创建本类对象时,调用的方法为本类方法:

创建子类对象时,调用的方法是子类方法,如果没重写,调用的就是继承父类的方法

(3)父类的引用是不可以调用子类特有的方法。

二、多态中的引用类型转换

1、向上类型转换(隐式/自动类型转换)

小类型到大类型的转换

2、向下类型转换(强制类型转换)

大类型到小类型的转换

3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。

4、一个demo

5、使用instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题的一个demo

三、抽象类

1、语法定义

在类前面使用abstract修饰的类就是抽象类

2、应用场景:

(1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

(2)从多个具有相同特征的子类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

3、作用:

限制规定子类必须实现的某些方法,但不关注实现细节。

4、使用规则:

(1)使用abstract定义抽象类

(2)abstract定义抽象方法,只有声明,不需要实现

(3)包含抽象方法的类是抽象类

(4)抽象类中可以包含普通的方法,也可以没有抽象方法。

(5)抽象类不能直接创建,可以定义引用变量

5、一个demo

(1)建立一个手机抽象类

package com.cnblogs;

public abstract class Telphone
{
    public abstract void call();
    public abstract void sendMessage();
}

(2)创建一个老式手机CellPhone类

package com.cnblogs;

public class CellPhone extends Telphone {

    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println("通过键盘打电话");
    }

    @Override
    public void sendMessage() {
        // TODO Auto-generated method stub
        System.out.println("通过键盘发短信");
    }

}

(3)同(2),建立只能手机类SmartPhone

package com.cnblogs;

public class SmartPhone extends Telphone {

    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println("使用语音打电话");

    }

    @Override
    public void sendMessage() {
        // TODO Auto-generated method stub

        System.out.println("使用语音发短信");
    }

}

(4)建立入口类Init

package com.cnblogs;

public class Init {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Telphone tel1 = new CellPhone();
        tel1.call();
        tel1.sendMessage();
        Telphone tel2 = new SmartPhone();
        tel2.call();
        tel2.sendMessage();

    }

}

(5)运行结果:

四、Java中的接口

1、接口定义

类是一种具体实现提,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类方法的具体实现,它只规定这些类里必须提供的某些方法。

2、定义方法:

使用interface关键字:

[修饰符]  interface 接口名[extends 父接口1,父接口2……]
{
    0个~多个常量定义
    0个~多个抽象方法定义
}

3、接口定义:

接口中的方法只能是抽象方法,总是使用,即使定义时不添加public  abstract修饰符,系统也是默认加上的。

4、使用接口:

一个类可以实现一个或多个接口,实现接口使用implements关键字,Java中一个类只能继承一个父类,但是可以继承多个接口。

格式固定,不能改变extends和Implements顺序的调换。

5、一个demo

(1)定义一个接口:

package com.cnblogs;

public interface IPlayGame {
    public void playGame();

}

(2)SmartPhone引用接口

package com.cnblogs;

public class SmartPhone extends Telphone implements IPlayGame
{

    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println("使用语音打电话");

    }

    @Override
    public void sendMessage() {
        // TODO Auto-generated method stub

        System.out.println("使用语音发短信");
    }

    public void playGame()
    {
        System.out.println("手机可以玩游戏");
    }

}

(3)新建PSP类,引用接口

package com.cnblogs;

public class Psp implements IPlayGame {

    @Override
    public void playGame() {
        // TODO Auto-generated method stub
        System.out.println("PSP可以玩游戏");

    }

}

(4)使用方法:

IPlayGame ip1 = new SmartPhone();
IPlayGame ip2 = new Psp();

ip1.playGame();
ip2.playGame();

6、使用接口

(1)接口在使用过程中,还经常与匿名内部类配合使用

(2)匿名内部类定义:

没有名字的内部类,多用于关注实现而不关注实现类的名称

(3)语法格式:

Interface i = new Interface();
{
    public void method()
    {
        System.out.println("匿名内部类实现接口的方式");
    }
}

(4)一个demo

IPlayGame ip3 = new IPlayGame(){

            @Override
            public void playGame() {
                // TODO Auto-generated method stub
                System.out.println("使用匿名内部类的方式实现接口");
            }
        };

        ip3.playGame();

        new IPlayGame(){

            @Override
            public void playGame() {
                // TODO Auto-generated method stub
                System.out.println("使用匿名内部类的方式实现接口2");
            }

        }.playGame();

五、UML简介

1、UML概念

时间: 2024-12-27 23:35:06

Java学习笔记(十)——多态的相关文章

Java学习笔记4——多态

多态 1.引用多态:1)父类的引用可以指向本类的对象:2)父类的引用可以指向子类的对象 public static void main(String[] args) {         Animal obj1 = new Animal(); //父类的对象指向本类         Animal obj2 = new Dog(); //父类的引用可以指向子类的对象         //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类  } 2.方法多态   1)创建本

黑马程序员——JAVA学习笔记十二(高新技术一)

 1,    静态导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.solaire.enhance; import static java.lang.Math.max;  //import   语句可以导入一个类或某个包中的所有类 //import static  静态导入 JDK5以后才有.语句导入一个类中的某个静态方法或所有静态方法 //无名包和有包名中的类在一起,没有package,则为无名包. //一个类

黑马程序员——JAVA学习笔记十(IO)

1,    可以从其中读入一个字节序列的对象成为输入流,可以向其中写入一个字节序列的对象就做输出流.这些字节序列的来源地可以是文件,也可以是网络连接或者内存块.抽象类InputStream和OutputStream构成了I/O层次的基础.因为字节流不便于处理以Unicode存储的信息,所以有了Writer和Reader抽象类,这些从其中继承的类都是读入和写入基于2个字节的Unicode码元,而不是单个字节.   2,    InputStream 与OutputStream: abstract

Java学习笔记十(注解)

1.介绍 注解是JavaSE5.0開始提供的一项新特性,利用此特性能够通过特定的注解标签为程序提供一些描写叙述性信息. 这些描写叙述性信息能够在编译或执行时为编译器.执行环境提供附加的信息.从而简化开发.  2.自己定义注解 1.声明自己的注解 @interface <注解名称>{<注解属性类型> <注解属性名称>[default<默认值>]} <span style="font-family:SimSun;font-size:18px;&q

Thinking in java学习笔记之多态

多态是一种将改变的事物和未变的事物分离开来的重要技术.

Java学习笔记之多态

1.父类型的引用可以指向子类型的对象: Parent p = new Child(); 2.当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误:如果有,再去调用子类的该同名方法. 3.静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用.调用的时候用谁的引用,则调用谁的版本. 4.使用多态,只能使用重写父类的方法,若方法只在父类定义而没有重写,调用的是父类的方法. 5.如果想要调用

黑马程序员——JAVA学习笔记十四(高新技术三)

10 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. 动态代

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.