精华内容
下载资源
问答
  • 但是向上转型的应用场景是什么呢?我看到网上的说是为了获取父类的方法,子类也可以访问父类的方法啊,就算是覆盖的方法,也可以通过super.方法()来访问父类的方法啊。2.代码代码来源是《深入剖析Tomcat》第二章的...

    1.问题描述

    向下转型的应用场景是面向接口编程的时候,经常需要向下转型。但是向上转型的应用场景是什么呢?

    我看到网上有的说是为了获取父类的方法,子类也可以访问父类的方法啊,就算是覆盖的方法,也可以通过super.方法()来访问父类的方法啊。

    2.代码

    代码来源是《深入剖析Tomcat》第二章的代码。

    package ex02.pyrmont;

    import java.net.URL;

    import java.net.URLClassLoader;

    import java.net.URLStreamHandler;

    import java.io.File;

    import java.io.IOException;

    import javax.servlet.Servlet;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    public class ServletProcessor1 {

    public void process(Request request, Response response) {

    String uri = request.getUri();

    String servletName = uri.substring(uri.lastIndexOf("/") + 1);

    URLClassLoader loader = null;

    try {

    // create a URLClassLoader

    URL[] urls = new URL[1];

    URLStreamHandler streamHandler = null;

    File classPath = new File(Constants.WEB_ROOT);

    // the forming of repository is taken from the createClassLoader

    // method in

    // org.apache.catalina.startup.ClassLoaderFactory

    String repository = (new URL("file", null,

    classPath.getCanonicalPath() + File.separator)).toString();

    // the code for forming the URL is taken from the addRepository

    // method in

    // org.apache.catalina.loader.StandardClassLoader class.

    urls[0] = new URL(null, repository, streamHandler);

    loader = new URLClassLoader(urls);

    } catch (IOException e) {

    System.out.println(e.toString());

    }

    Class myClass = null;

    try {

    myClass = loader.loadClass(servletName);

    } catch (ClassNotFoundException e) {

    System.out.println(e.toString());

    }

    Servlet servlet = null;

    try {

    servlet = (Servlet) myClass.newInstance();

    servlet.service((ServletRequest) request,

    (ServletResponse) response); //注:Request实现了ServletRequest接口,这里为什么要向上转型呢?

    } catch (Exception e) {

    System.out.println(e.toString());

    } catch (Throwable e) {

    System.out.println(e.toString());

    }

    }

    }

    SO相同问题

    Java不太懂, 之前学过一点.

    我认为是这样的:

    // 为了方便理解, 用的汉子

    class 鸟{

    public void 吃(){}

    }

    class 鹦鹉 extends 鸟{

    public void 吃(){

    System.out.println("鹦鹉 吃");

    }

    }

    class 鸽子 extends 鸟{

    public void 吃(){

    System.out.println("鸽子 吃");

    }

    }

    class test{

    public static void main (String[] args){

    鸟 Niao = new 鸽子();

    喂食(Niao);

    }

    public static void 喂食(鸟 Niao){

    Niao.吃();

    }

    }

    这行代码将 Request 和 Response 类型的参数强制转换为 ServletRequest 和 ServletResponse,这不是向上,仍然是向下。强制类型转换与变量本身的类型有关,而与变量所指向的对象的实际类型无关。

    这个不叫向上转型,只是一个显式的类型转换吧

    向上转型基本上都是画蛇添足,脱裤子放屁,只有个别时候才需要

    展开全文
  • 但是向上转型的应用场景是什么呢?我看到网上的说是为了获取父类的方法,子类也可以访问父类的方法啊,就算是覆盖的方法,也可以通过super.方法()来访问父类的方法啊。2.代码代码来源是《深入剖析Tomcat》第二章的...

    1.问题描述

    向下转型的应用场景是面向接口编程的时候,经常需要向下转型。但是向上转型的应用场景是什么呢?

    我看到网上有的说是为了获取父类的方法,子类也可以访问父类的方法啊,就算是覆盖的方法,也可以通过super.方法()来访问父类的方法啊。

    2.代码

    代码来源是《深入剖析Tomcat》第二章的代码。

    package ex02.pyrmont;

    import java.net.URL;

    import java.net.URLClassLoader;

    import java.net.URLStreamHandler;

    import java.io.File;

    import java.io.IOException;

    import javax.servlet.Servlet;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    public class ServletProcessor1 {

    public void process(Request request, Response response) {

    String uri = request.getUri();

    String servletName = uri.substring(uri.lastIndexOf("/") + 1);

    URLClassLoader loader = null;

    try {

    // create a URLClassLoader

    URL[] urls = new URL[1];

    URLStreamHandler streamHandler = null;

    File classPath = new File(Constants.WEB_ROOT);

    // the forming of repository is taken from the createClassLoader

    // method in

    // org.apache.catalina.startup.ClassLoaderFactory

    String repository = (new URL("file", null,

    classPath.getCanonicalPath() + File.separator)).toString();

    // the code for forming the URL is taken from the addRepository

    // method in

    // org.apache.catalina.loader.StandardClassLoader class.

    urls[0] = new URL(null, repository, streamHandler);

    loader = new URLClassLoader(urls);

    } catch (IOException e) {

    System.out.println(e.toString());

    }

    Class myClass = null;

    try {

    myClass = loader.loadClass(servletName);

    } catch (ClassNotFoundException e) {

    System.out.println(e.toString());

    }

    展开全文
  •  到底有什么区别?这是上转型。 上转型对象不是父类创建的对象,而是子类对象的“简化”状态,它不关心子类新增的功能,只关心子类继承和重写的功能。当一个类有很多子类时,并且这些子类都重写了父类中的某个方法...
     List<String> lists = new ArrayList(); ArrayList<String> lists = new ArrayList(); 
    到底有什么区别?这是上转型。
    上转型对象不是父类创建的对象,而是子类对象的“简化”状态,它不关心子类新增的功能,只关心子类继承和重写的功能。
    当一个类有很多子类时,并且这些子类都重写了父类中的某个方法。
    当使用上转型对象在调用这个方法时就可能具有多种形态。因为不同的子类在重写父类的方法时可能产生不同的行为。也就是说,不同对象的上转型对象调用同一方法可能产生不同的行为。

    例如下面的程序你测试一下就可以理解这样的用法。以下的程序输出为
    Wang!Wang!......
    miao~~miao~~...
    package com.vince.testJava;
    
    class Animal {
    	void cry() {
    	}
    }
    
    class Dog extends Animal {
    	void cry() {
    		System.out.println("Wang!Wang!......");
    	}
    }
    
    class Cat extends Animal {
    	void cry() {
    		System.out.println("miao~~miao~~...");
    	}
    }
    
    public class Test01 {
    	public static void main(String args[]) {
    		Animal animal;
    		animal = new Dog(); // animal是Dog对象的上转型对象
    		animal.cry();
    		animal = new Cat(); // animal是Cat对象的上转型对象
    		animal.cry();
    	}
    }


    展开全文
  • 向上转型: 当子类的对象赋值给一个父类的引用时,便是向上转型,多态本身就是向上转型的过程 使用格式:父类类型 变量名= new 子类类型(); 2.向下转型: 一个已经向上转型的子类对象可以使用强制类型转换的格式,将...

    一、多态的概念

    多态是继封装,继承之后,面向对象的三大特性。

    现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态。

    java作为面向对象的语言,同样可以描述一个事物的多种形态,java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口) 变量赋值。

    父类的引用变量指向子类对象。多态的前提需要有继承关系或者是实现关系,否则没法完成多态。在使用多态后的父类引用变量调用方法时,会调用子类重写的;

    二、多态的定义与使用

    多态的定义格式:就是父类的引用变量指向子类的对象;

    父类类型变量名 = new 子类对象();

    变量名.方法名();

    1.普通类的多态定义格式:

    父类类型变量名 = new 子类();

    3fa4257f894d06b1c9984ac01a1437b2.png

    2.抽象类多态的定义:

    抽象类变量名 =new 抽象类子类();

    130fba7cb8bd3f45e43e2a2c55e93017.png

    3.接口多态定义的格式:

    接口变量名 =new 接口实现类();

    00e8be7319743bd651d57432ec2a664c.png

    注意:虽然变量指向子类的对象,但表现的是一个父类的形态,可以调用一切父类的方法,子类特有的方法将不能调用

    三、多态调用的注意事项:

    编译:成员变量,成员方法都需要看父类;父类没有编译报错;

    运行:成员变量运行父类的成员变量,成员方法运行父类重写的方法

    四、多态的好处与弊端

    好处:多态配合继承子类重写,提高了代码的复用性与扩展性

    弊端:不能调用子类特有的方法

    五、向上向下类型转换

    多态本身是子类类型向父类类型向上转型的过程;

    1.向上转型:

    当子类的对象赋值给一个父类的引用时,便是向上转型,多态本身就是向上转型的过程

    使用格式:父类类型 变量名= new 子类类型();

    2.向下转型:

    一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类的引用转换为子类引用,这个过程是向下转型。直接创建父类对象的无法使用向下转型;

    使用格式:

    子类类型 变量名= (子类类型) 父类类型的变量;

    六、instanceof 关键字

    可以通过instanceof关键字来判断某个对象是否属于某种数据类型;

    使用格式:

    boolean b= 对象(new ) instanceof 数据类型;

    展开全文
  • 假如你在一个物流运输公司,个客户要求你为他运输一定数量的产品到某地,使用某种交通工具. 那我们假设你的管理程序中Truck类,Train类,Plane类专门用来实现 使用不同交通工具的成本计算,都方法cost...
  • java中的向上转型有什么?

    千次阅读 2010-03-10 11:51:00
    假如你在一个物流运输公司,个客户要求你为他运输一定数量的产品到某地,使用某种交通工具.那我们假设你的管理程序中Truck类,Train类,Plane类专门用来实现使用不同交通工具的成本计算,都方法cost(Double ...
  • 一、static关键字作用:用来修饰类的成员(属性、方法)static关键字特点:在类...只有在所有对象都是同一个属性值的时候我们才建议到属性上static修饰2.静态方法中不能this关键字总结:静态只能访问静态,非静态...
  • 生活中具体一类的事物也抽象一类的事物所以类当然也分为普通类和抽象类。对象:是实现类的具体实列。2.定义类的步骤定义类名编写属性编写方法举例:public class person{ //定义类名:人类 private Stri...
  • 多态有什么用?我给大家想了两个需求: 1)要求程序运行起来以后,如果用户输入自行车,就执行自行车的驾驶方法。如果用户输入小轿车,就执行小轿车的驾驶方法。这是就用到父类指针指向子类时的override。2)如果你有...
  • 一、认识多态1、方法调用在Java中,方法调用两类,动态方法调用与静态方法调用。(1)静态方法调用是指对于类的静态方法的调用方式,是在编译时刻就已经确定好具体调用方法的情况,是静态绑定的。(2)动态方法调用...
  • 一整体认识: 面向对象四个基本特性:抽象、封装、继承、多态。这四个特性,整体概括起来可以这么理解就可以,抽象、封装、继承是多态的基础,多态是抽象、封装、继承的表现。二多态的定义和作用 :不同类的对象对...
  • 这篇文章主要介绍了Java向上转型和向下转型实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下学习向上转型和向下转型怎么没多难,但是为什么那样,我...
  • 展开全部java 转型问题其实并不复杂,只要记住一句话:父类引62616964757a...从2个名词开始说起:向上转型(upcasting) 、向下转型(downcasting).举个例子:2个类,Father是父类,Son类继承自Father。Father f1 = ...
  • 学习向上转型和向下转型怎么没多难,但是为什么那样,我搞了很多次没弄明白。没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法。 首先看下怎么...
  • 学习向上转型和向下转型怎么没多难,但是为什么那样,我搞了很多次没弄明白。没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法。 首先看下怎么...
  • 学习向上转型和向下转型怎么没多难,但是为什么那样,我搞了很多次没弄明白。没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法。 首先看下怎么...
  • 学习向上转型和向下转型怎么没多难,但是为什么那样,我搞了很多次没弄明白。没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法。首先看下怎么...
  • java之向上转型

    2017-08-30 14:02:27
    学习java一段时间了,一直在使用向上转型,就这样着,但是一直都不是很清楚为什么这样使用?这样使用会带来哪些好处?package reuse; public class Wind extends Instrument{ public static void main(String...
  • 不是很理解,也并不知道有什么意义,因为如果仅仅写 Car car = new Benz(); 程序运行结果是一样的。 在经过阅读书籍和查看别的博主写的关于向上向下转型的博客后,发现题目中这么写完全就是为了出题,它和仅仅写...
  • Java向上转型的作用(详细代码介绍)

    千次阅读 多人点赞 2018-05-11 11:04:58
    今天看到一道Java的练习题,题目如下 当时对于主函数中 ... 在经过阅读书籍和查看别的博主写的关于向上向下转型的博客后,发现题目中这么写完全就是为了出题,它和仅仅写Car car = new Benz(); ...
  • java多态的向上转型和向下转型 都有什么好处啊 我直接子类类型对象接收不一样的吗 父类对象接收有什么好处吗 而且此对象只能引用父类和子类共有的方法 多局限啊~~ 向下转型什么意思的忘了 。。。反正迷迷糊糊的...
  • 内部类与向上转型

    2013-08-24 12:43:46
    然而,当你将内部类向上转型为其基类,尤其是转型为一个接口的时候,内部类就 武之地。(从实现了某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基 类,实质上效果是一样的。)这是因为此内部
  • 什么要存在向下转型?因为子类除了父类的方法,也可以自己额外的方法。这些方法是基类所没有的。一旦向上转型,就不能调用子类中的新方法。必须别的方式调用这些新方法。这需要向下。...
  • 向下转型有什么用? 定义一个Animal父类: public class Animal {  public void eat(){  System.out.println("吃饱了!");  } } 定义一个Bird类继承Animal: public class Bird extends Animal {  ...
  • 向上转型) 举个栗子: //多态的学习 /*存在,三个必要条件:继承,方法重写,父类引用指向对象 * 父类引用指向子类对象后,该父类引用调用子类重写的方法,此时出现多态 * * */ public class Te...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 123
精华内容 49
关键字:

向上转型有什么用