栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面向对象之多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面向对象之多态

多态 1概述

在不同的个体上会表现出不同的状态,即同一个行为,不同的实现,就是多态。

2多态的定义

多态是面向对象的三大特征之一,也是最重要的特点,多态主要在Java中体现在两个方面:

1行为的多态(重载,重写 ---静态绑定)

2属性的多态(父类引用指向子类对象----动态绑定)

3多态的好处

提高代码的重用性

降低代码耦合度

提高程序的扩展性

4构成多态的必要条件

必须存在继承或者实现关系

父类的引用指向子类对象

必须有方法的重写

5数据类型转型

向上转型: 隐式转换(子类转为父类型)直接转

Pet cat = new Cat();
 Pet pet = new Pet();
 Pet p = cat;   //子类向上转型

向下转型:显示转换 (父类型转为子类型)手动转

Pet cat = new Cat();
Pet pet = new Pet();
Pet p = cat;
Cat c = (Cat)pet;  //父类型手动转为子类型

只能发生在继承关系中

子类之间不能互相转换的(编译无法通过)

内部类

在类的内部声明一个类,嵌套类,内属类;当一个类b只为另一个类a服务,其它类不可能再用到b时,就没必要再创建一个单独的类,因此可以将类b存放在类a中,减少不必要的文件创建,Java中的内部类包含以下四种:

成员内部类

局部内部类

静态内部类

匿名内部类

成员内部类

 定义成员内部类

public class Demo01 {
    private int a;   //属性、成员变量、全局变量
    {
        //游离块,代码块
    }
    public void m1(){   //行为、方法、成员方法
        System.out.println("这是类的成员方法");
    }
    //成员内部类
    class Inner{
        private int b;
        public void m2(){
            System.out.println("这是成员内部类的一个方法");
        }
    }
}

访问成员内部类的资源

public class Test {
    public static void main(String[] args) {
        Demo01 demo01 = new Demo01();  //创建外部类的对象
        Demo01.Inner inner = demo01.new Inner();   //通过外部类创建的对象再创建内部类对象
        inner.m2();
    }
}

注意:

1成员内部类和成员方法,成员变量同一个级别

2创建内部类需要外部类对象完成

3内部类可以直接访问外部类的资源

4大部分时候内部类是私有的

局部内部类

局部内部类类似于局部变量,一般在一个方法中或一个语句块中出现,作用范围只作用于当前的声明区域,若某一个类,只为某个语句块或某个方法提供服务,就不必要声明全局类,更没有必要创建单独的java文件,因此,只需要在该方法内部去声明这个类

public class Demo02 {
    int c = 50;
    public void m1(){  //成员方法
        int i = 10;   //局部变量
        class TestInner{      //局部内部类
            int a = 20;

            public void m2(){
                c = 90;
                //i = 100     局部变量的值不可修改
                System.out.println(i);
                System.out.println(c);
                System.out.println("这是局部内部类的方法");
            }
        }

        TestInner testInner = new TestInner();  //实例化局部内部类
        testInner.m2();       //调用局部内部类中的方法 
        testInner.a = 10;      //调用局部内部类方法
        System.out.println(testInner.a);
    }
}

注意:

1局部内部类,不能使用权限修饰符

2只能在方法中访问

3局部内部类可以使用全局变量,修改全局变量,但是它所属的方法的局部变量是只读的,默认添加final关键字

4.局部内部类想要调用外部类的变量,则需要使用 外部类名.this.变量名

静态内部类

定义

public class Demo03 {
    void m1(){
        System.out.println("普通成员方法");
    }
    static class Inner{  //定义一个静态内部类
        void m2(){
            System.out.println("这是静态内部类的方法");
        }
    }
}

使用

Demo03.Inner inner03 = new Demo03.Inner(); //静态内部类创建对象
inner03.m2();
 匿名内部类

它是一个没有名字的类,大多数时候,匿名内部类针对抽象类和接口来使用

对普通类创建匿名内部类

Demo04 demo04 = new Demo04(){   //匿名内部类的创建
            public void m1(){
                System.out.println("这是匿名内部类的m1方法!");
            }
        };

对接口创建匿名内部类

Demo05 demo05 = new Demo05() {
            @Override
            public void m1() {
                System.out.println("内部类重写了接口中的方法");
            }
        };

注意:

1匿名内部类就是一个没有名字的类

2创建匿名内部类时就是在创建匿名内部类对象

3匿名内部类没有构造器,如果要使用构造器功能,可以使用代码块实现构造器功能

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号