从向上向下转型到----抽象类接口(一)

对象的多态性-向上向下转型
  向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动转换;

  向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类) 父类实例,强制转换;

  注意:对象的多态性和方法复写是联系在一起的

  向上转型:

class A{
public void print(){
System.out.println("a")
}
}

class B extends A{
public void print(){
System.out.println("b")
}
}

public class Demo{
public static void main(String args[]){
B b =new B();
b.print();
}
}

注意:本程序实例化的是子类对象,并且print()方法又被复写了,最终调用的一定是被复写过的方法

向下转型

public static void main(String args[]){
A a = new B();
B b = (B) a;
b.print();
}

注意:必须发生向上转型之后,才能发生向下转型,而向下转型有风险,尽量少使用.

好处:在实际开发中,对象向上转型的主要意义在于参数的统一,也是最为主要的用法,而对象的向下转型指的是调用子类的个性化操作.
举个例子,假如有多个类继承自一个类,并且复写其中的一个方法,那么我们可以:

public class Demo{
public static void main(String args[]){
fun(new B());
fun(new c());
}

public static void fun(A a){ //这里只用到了A a 一个参数
a.print();
}
}

而向下转型.如果子类有没有复写父类的方法,而且要调用,那么就要用到了.

抽象类
抽象类:抽象类就是指在普通方法里增加了抽象方法,而且抽象方法没有方法体,用abstract修饰.同时有抽象方法的类,也必须要被abstract修饰
而抽象类与向上向下转型的关系是,抽象类无法实例化,要调用,必须使用向上向下转型.
同时抽象类必须被继承,而且子类必须重写父类的所有抽象方法.

抽象类的限制
抽象类不能用final修饰

抽象类的应用---模板设计模式
普通方法定义在抽象类时,可以直接调用类中的方法,但是具体的抽象方法内容就必须由子类提供

abstract class A{
public void fun(){ //普通方法调用子类方法
this.print();
}
public abstract void print(); //抽象方法
}
class X extends A{
public void print(){
System.out.println("重写父类的抽象方法")
}
}
public class Demo{
public static void main(String args[]){
A a =new X();
a.fun();
}
}

理解:如果将父类的方法print比喻为叫这一行为的话,子类的重写则是表明具体是什么在叫.

原文地址:https://www.cnblogs.com/haizhongdenta/p/8727219.html

时间: 2024-10-09 11:05:35

从向上向下转型到----抽象类接口(一)的相关文章

2.25 Java基础总结 ①多态②向上向下转型③instanceof

①多态②向上向下转型③instanceof 一.多态即相同行为,不同实现有两种方法:重载和重写分类:①静态多态:编译时已经确定效果,所用重载实现(不是指static)②动态多态:编译未知,运行已知(使用动态绑定和重写实现) 动态绑定:父类的引用指向子类的对象,执行相应的子类方法,而不是父类的,从而实现多态性 二.向上转型,向下转型向上转型:一个父类的引用可以指向不同的子类对象,或者说一个子类的对象可以被当做一个父类类型低精度向高精度转pet = cat;自动转,子类向父类 向下转型:强制转,有很

Java之路 - 抽象类、接口、多态、向上向下转型

1.抽象类 如果父类当中的方法不确定如何进行{}方法实现,那么这就是一个抽象方法 抽象方法所在的类必须是抽象类 使用方法: (1)不能直接创建new抽象类对象 (2)必须用一个子类来继承抽象父类 (3)子类必须覆盖重写抽象父类当中所有的抽象方法 覆盖重写(实现):去掉抽象方法的abstract关键字,然后补上方法体大括号: (4)创建子类对象进行使用 public abstract class animal { //抽象类 public abstract void eat(); //这是一个抽象

java(向上向下转型)

在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.

Java面向对象之多态(向上向下转型) 入门实例

一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. 多态的前提: 1.必须要有继承关系或者实现关系. 2.通常对方法进行重写.覆盖. 3.父类或者接口要引用指向子类对象. 多态向上转型: 1.提高程序的扩展性,隐藏了具体子类型 2.只能使用父类中的功能,不能使用子类特有的功能.功能被限定了. 多态向下转型: 1.可以使用子类型的特有功能. 2.必须

对象的向上向下转型规则

对象的转型:向上转型:子类-->父类向下转型:父类-->子类 例如: Class B extends AA a;B b;向上转型是自动的:b = new B();a = b; 向下转型要强制转换:a = new B();b = (B)a; 正确 a = new A();b = (B)a; 错误   *并且在向下转型之前要进行向上转型:即通过a=new B();得到的: *否则会报java.lang.ClassCastException: note.A cannot be cast to not

java-多态的向上向下转型

package com.多态; public class Demo1 { /** * @param args * int i=10; * byte j=20; * i=j;//自动类型提升 * j=(byte)i;//自动类型转换 */ public static void main(String[] args) { Animal2 a=new Cat();//父类引用指向子类对象.就是向上转型 System.out.println(a.num);//10,a引用只能看到父类对象属性值 a.ea

HttpServletRequest ServletRequest 向下转型

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  HttpServletRequest req = (HttpServletRequest) request;  HttpServletResponse resp = (HttpServletResponse) response; } 因为要

Java基础第9天+final关键字、多态(上转型,下转型)、抽象类(特点,成员特点)、接口(特点,成员特点)

1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: A:局部变量 a:基本类型 值不能发生改变 b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的 B:初始化时机 a:只能初始化一次. b:常见的给值 定义的时候.(推荐) 构造方法中. 2:多态(掌握) (1)同一个对象在不同时刻体现出来的不同状态. (2)多态的前提: A:有继承或者实

java向上转型和向下转型

一直不太明白这个概念,于是在网上搜索了一下文章转载自:http://www.cnblogs.com/fickleness/p/3149011.html 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者