上转型对象:

如果B类是A类的子类(或间接子类),当用子类创建对象b并将这个对象的引用放到父类对象a中时,如:

A a;
a = new b()
A a;
B b = new B();
a = b;
则称a是b的上转型对象。

对象b的上转型a的实体是有子类B创建的,但是上转型对象会失去子类B的一些属性和功能。

上转型对象具有以下特点

  1. 上转型对象不能操作子类新增加的成员变量,不能使用子类新增的方法。即为较子类B失去一些属性和功能,这些属性和功能是新增的。
  2. 上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承的或重写的方法。即为上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写。
  3. 上转型对象调用方法时,就是调用子类继承和重写过的方法。而不会是新增的方法,也不是父类原有的方法。
  4. 可以将对象的上转型对象再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能。

注意:

1.不可以将父类对象引用赋给子类。

2.如果子类重写了父类的静态方法(static),那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。

抽象类:

   用关键字abstract修饰的类称为抽象类,如:

abstract class A{

...

}

   用关键字abstract修饰的方法称为抽象方法,如:

abstract int way (int x , int y);

对于抽象方法,只能声明不能实现。且不能同时和 final修饰同一个方法或类,也不能用 static修饰 abstract 方法。

意义:

抽象类可以抽象出重要的行为标准(用抽象方法表示)。即抽象类封装了子类必须有的行为标准,而标准的具体行为在子类中实现。

注意:

    1,抽象类中可以有构造方法及非抽象方法。

2,子类必须全部覆写抽象类中的全部抽象方法

3.抽象类不能用new创建对象

4,abstract类的对象作为上转型对象

//========================================例题

  要求有一个abstract类,类名为Student。Student的子类有Genstudent、Outstudent。学生的共同属性是,学号,姓名,年龄。共同行为是吃饭。有差异的行为是学习。

有一个School类,该类用Student对象数组作为成员,Student对象数组的单元可以是Genstudent对象的上转型对象、Outstudent对象的上转型对象。

编写测试类进行测试School对象中所有学生名单显示。

abstract class Student

{
int num,age;
String name; 
public String nomal_act()//非抽象方法,可以实现

return"学号 :"+num+" 姓名 :"+name+" 年龄 :"+age+" \n 共同行为:吃饭 ";

public abstract String deffer_act();//抽象方法,不可以实现
}

class Genstudent extends Student
{
public Genstudent(int num,int age,String name)

super.num = num;
super.age = age;
super.name = name; 
}
public String deffer_act()
{
return" \n 差异性为:努力学习";

}

class Outstudent extends Student
{
public Outstudent(int num,int age,String name)

super.num = num;
super.age = age;
super.name = name; 
}
public String deffer_act()
{
return" \n 差异性为:不学习";

}

class School 
{
String inform;
public void set_inform(Student stu)//设置信息
{
inform = stu.nomal_act()+stu.deffer_act();
}
public void Show_inform()//输出信息
{
System.out.println(inform);
}
}

public class Test
{
public static void main(String args[])
{

int person = 0;//学生信息数量,默认为0
Scanner input = new Scanner (System.in);//创建一个键盘扫描类对象
System.out.println("================================录入信息==============================");
System.out.println("输入要录入学生信息数目");
person = input.nextInt();
School[] school = new School[person];//创立数组对象
Student stu ;

for(int i = 0;i< person;i++)
{
school[i] = new School();// school[i]实例化,没有会报错 
System.out.println("输入学号,名字,年龄,以及是否好学(Y/N)?");
int num = input.nextInt(); 
String name = input.next(); 
int age = input.nextInt();
String act= input.next(); 
stu =new Outstudent(num,age,name);//避免 stu未实例化
if(act.equals("Y")){ stu =new Genstudent(num,age,name);}//差异行为判断

school[i].set_inform(stu);
}
System.out.println("=================================信息表===============================");
for(int i = 0;i< person ;i++)
{
school[i].Show_inform();

}

}

//==================================结果

//姓名是String型,但是我懒得输了,就这样吧。

//最近在学Java想把进程记录下来,要是有错。。告诉我就好,不要骂我,会哭的哦。

java-上转型对象&抽象类-学习记录的更多相关文章

  1. Java中对象的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...

  2. java 对象的上转型对象(父类)

    Example5_10.java class 类人猿 { void crySpeak(String s) { System.out.println(s); } } class People exten ...

  3. java中的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...

  4. 关于java的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...

  5. java上转型和下转型(对象的多态性)

    /*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...

  6. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  7. java开源项目之IQQ学习记录之项目环境搭建与启动

    本文链接地址:http://blog.csdn.net/sushengmiyan/article/details/18779727 作者:sushengmiyan 现在就码字说说今天晚上搞定的一个项目 ...

  8. java上转型之instanceof--避免引用类型强制转化出错

    Object obj="hello"; 上面的obj是什么类型? object?NO!String?NO? 答案:编译阶段是Object类型,而在运行阶段是String类型.实际上 ...

  9. 《Java程序设计》第一周学习记录(2)

    目录 使用JDB调试程序 系统文件被覆盖的挽救 参考资料 使用JDB调试程序 JDB是JDK自带的基于命令行的调试程序.我们先来man一下吧(说到这里,我之前在翻娄老师的博客的时候看到一篇文章:做中学 ...

随机推荐

  1. Linux下nautilus的右键快捷菜单项设置

    某一天我的Linux更新完后, 我照常在文件夹下点击右键想打开终端, 却发现右键快捷菜单没有Open in terminal的菜单项了. 在网上查找了一下, 结合自己系统的情况发现了解决办法. 由于我 ...

  2. 微服务日志之Spring Boot Kafka实现日志收集

    前言 承接上文( 微服务日志之.NET Core使用NLog通过Kafka实现日志收集 https://www.cnblogs.com/maxzhang1985/p/9522017.html ).NE ...

  3. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  4. 背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意

    [源码下载] 背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意 作者:webabcd 介绍背水一战 Windows 10 之 用户和账号 获取用户的信息 获 ...

  5. so静态分析进阶练习——一个CreakeMe的分析思路

    i春秋作家:HAI_ 原文来自:https://bbs.ichunqiu.com/thread-41371-1-1.html 说明 拿到一个CreakeMe,写一个分析思路.CreakMe主要是对.s ...

  6. Java学习笔记51(综合项目:家庭记账系统)

    javaEE的开发模式 1.什么是模式 模式在开发过程中总结出的“套路”,总结出的一套约定俗成的设计模式 2.javaEE经历的模式 model1模式: 技术组成:jsp+javaBean model ...

  7. 【书籍推荐】java初级到中级书籍推荐

    <编码>--必读 <程序是怎么跑起来的> --必读 <计算机系统概论> <深入理解计算机>--部分章节必读 <操作系统概论> <计算机 ...

  8. ubuntu下TFTP Server 的安装和使用方法

    tftp是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP).小型文件传输协议非常简单,通过少量存储器就能轻松实现 ——这在当时是很重要的考虑因素.所以TFTP被用于引导计算机,例如 ...

  9. Spring.Net封闭业务类为WebService注意点和问题

    最近遇到的一个项目中用到了标题所说的方法,用Spring.Net将业务类封闭成WebService供其它地方调用使用,感觉还是蛮新鲜的,于是在园子中搜了一篇园友写的文章(这里)自己也尝试着搭了一个环境 ...

  10. 【xsy2304】哈 最短路

    题目大意:有一个$n$个点,$m$条有向边的图,有$q$组询问. 每次询问:从$a$到$b$,经过不超过$c$条边,且依次经过的边边权递增,问最短路为多少,无解输出-1. 数据范围:$n≤150$,$ ...