• java第五章:面向对象(oop)三大特性之多态


    多态(把代码写活,提高代码的扩展性和可维护性)

    生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳12:金刚石,石墨)

    程序中的多态:同一个“接口”因不同的实现,而执行不同的操作(就是在方法中把父类作为形式参数传入,调用的时候,传入子类的实例,最终执行的是子类中重写父类的方法)

    多态一般结合方法重写、继承使用,父类引用指向子类;

    多态实现步骤:

    1.实现继承

    2.编译时将父类作为形式参数类型传入(范围大一点,模糊一点)

    3.运行时将子类new出的实例传入,最终执行的是子类中重写父类的方法。

    类型的转换

    1.子类转换为父类,称为自动转换,也叫向上转型

    eg: Animal animal = new Dog();

    注意:向上转型完之后,animal只能访问父类中的属性和方法,子类中自有的属性和方法无法访问,调用的是子类中重写父类后的方法;

    2.父类转换为子类,称为强制转换,也叫向下转型

    eg: Animal animal  = new Dog();

      Dog dog = (Dog)animal;        此时dog只能调用子类中的属性和方法,无法访问父类中的属性和方法。

    final关键字,最终的意思

    1.修饰变量,该变量就成了常量,不能重新被赋值

    2.修饰方法,该方法不能被重写(在子类中)

    3.修饰类,该类不能被继承(eg:java.lang包中的Math类和String类)

    abstract关键字,抽象的意思

    抽象方法:使用abstact修饰的方法,最显著的特点是没有方法体,就是提供给子类重写用的一种规范。(可以abstract void test(),也可以public/protected abstract void test());

    抽象类:使用abstract修饰的类,抽象类中可有可无抽象方法,可以有属性和构造方法。但是不能被实例化(不能new),天生为继承而生Animal animal = new Dog();

    有抽象方法的类,一定是抽象类,必须是抽象类,要不然会报错。

    抽象类的作用:防止编写程序的随意性,提供一种规范;

    java中的设计模式(GOF),23种,是前人对经典问题总结出来的解决方案

    单例模式:一个类只能创建一个实例对象,实现方法:构造方法私有化,提供一个共有的静态方法获取实例。

    实现方式:1.饿汉式   2.懒汉式

    简单工厂模式(静态工厂方法):可以生产产品,可以降低因生产产品而导致的耦合性过强(解耦合);

    实现方式:1.编写父类和子类或接口和实现类

         2.编写静态工厂方法,返回值类型是父类或接口——>多态;

         3.根据用户的需求,动态创建子类对象,并返回

    package cn.zzsxt.demo7.factory;
    //创建父类
    public abstract class AXE {
        public abstract void cut();
    }
    
    package cn.zzsxt.demo7.factory;
    //创建石斧子类
    public class StoneAxe extends AXE {
    
        @Override
        public void cut() {
            System.out.println("我是石斧,砍日本人钝!");
        }
    
    }
    
    package cn.zzsxt.demo7.factory.copy;
    //创建铁斧子类
    public class SteelAxe extends AXE{
        @Override
        public void cut(){
            System.out.println("我是铁斧,砍日本人锋利!");
        }
    }
    
    package cn.zzsxt.demo7.factory;
    //创建静态工厂方法
    public class AXEFactory {
        public static AXE getInstance(String str){
            AXE axe = null;
            if(str.equals("stone")){
                axe = new StoneAxe();
            }else if(str.equals("steel")){
                axe = new SteelAxe();
            }
            return axe;
        }
        
        public static void main(String[] args){
            AXE axe = AXEFactory.getInstance("stone");
            axe.cut();
            System.out.println("=========================");
            AXE axe2 = AXEFactory.getInstance("steel");
            axe2.cut();
        }
    }

        

  • 相关阅读:
    关于JS的Date对象的探究
    讲解跨域---凭空多出来的一次请求?
    时间format函数引爆的知识点和年末有话说
    再不写篇博客感觉就凉了
    关于after和before
    怎么在Vue中使用Base64格式的背景
    Vue入门
    前端实现Tab切换栏
    死锁和约束(四)
    Java ClassLoad详解
  • 原文地址:https://www.cnblogs.com/SXTzhaopengda/p/6957969.html
Copyright © 2020-2023  润新知