码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-06-07 18:41:32      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:生活   dog   根据   引用   设计   public   强制   ack   ring   

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

生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳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修饰的类,抽象类中可有可无抽象方法,可以有属性和构造方法。但是不能被实例化(不能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();
    }
}

 

    

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

标签:生活   dog   根据   引用   设计   public   强制   ack   ring   

原文地址:http://www.cnblogs.com/SXTzhaopengda/p/6957969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!