java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...

一、继承的作用

子类继承父类的属性和方法,实现代码的复用;

子类扩充自己的标准,实现精细化的类型定义。

二、子类构造方法的限制

子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象;

子类构造方法默认调用父类的无参构造方法;

如果父类没有无参构造方法,子类的构造方法需要明确指定调用的父类构造方法。

三、方法的重写

子类重写方法限制:方法名、参数类型、参数个数,必须和父类方法完全一致;

被子类重写的方法不能拥有比父类更为严格的访问控制权限(如父类方法为public,则子类重写方法也必须为public;如父类方法为protected,则子类重写方法只能为public或protected);

重写方法的返回值类型,可以是父类原方法的返回类型的子类(比如,父类方法返回Object,子类重写方法可以返回String)(但是,建议不要修改方法的返回值类型);

四、final关键字的约束限制

使用final修饰的类,不能被继承;

使用final修饰的方法,不能被子类重写(为保护父类关键代码,不被子类修改);

public static final修饰的属性,属于全局常量,全局常量在内存中存储在公共区;

final修饰的属性,一般使用全大写,单词间可通过下划线区分;

final修饰的属性,在定义时必须设置初始值,而且值赋值后不能再被改变。

五、多态性的两种描述形式

1、方法的多态性

方法的重载:同一个类中,相同方法名称,根据传入参数类型、参数个数不同,来实现不同的逻辑处理;

方法的重写:继承关系中,子类重写父类的方法,根据子类的不同,实现不同的逻辑处理;

2、对象的多态性

向上转型(自动完成):父类  父类对象 = 子类实例;

向下转型(强制完成):子类  子类对象 = (子类)父类实例;

六、分析:向上转型、向下转型

1、对于对象的转型,给出以下的经验总结

80%的情况下,只会使用向上转型。因为可以得到参数类型的统一,方便进行传参和数据处理;

5%的情况下,会使用向下转型。目的是向下转型后,调用子类的特殊方法;

15的情况下,不实用转型,直接使用本类对象进行操作。

个性化的操作在一个标准的开发之中应该尽量少出现,因为对象的转型操作里面毕竟有了强制问题,容易带来安全隐患。

2、向上转型的目的:可以得到参数类型的统一,方便进行传参和数据处理

packagecom.study.override;

/**

* 父类:水果类

*/

public classFruit {

publicString getInfo(){

return "Fruit *************";

}

}

/**

* 苹果类

*/

class Apple extendsFruit{

@Override

publicString getInfo() {

return "Apple *************";

}

}

/**

* 橘子类

*/

class Orange extendsFruit{

@Override

publicString getInfo() {

return "Orange *************";

}

}

classTest3{

public static voidmain(String[] args) {

Fruit f1 = newApple();

Fruit f2 = newOrange();

getFruit(f1);    //Apple *************

getFruit(f2);    //Orange *************

}

/**

* 接受统一的参数类型:Fruit

* @param fruit

*/

public static voidgetFruit(Fruit fruit){

System.out.println(fruit.getInfo());;

}

}

3、向下转型的目的:调用子类的特殊方法

只有对象发生了向上转型之后,才能成功的向下转型

packagecom.study.override;

/**

* 父类:水果类

*/

public classFruit {

public voidgetInfo(){

System.out.println("Fruit *************");

}

}

/**

* 子类:苹果类

*/

class Apple extendsFruit{

@Override

public voidgetInfo() {

System.out.println("Apple *************");

}

}

/**

* 子类:橘子类

*/

class Orange extendsFruit{

}

classTest3{

public static voidmain(String[] args) {

Fruit f1 = new Apple(); // 自动进行了向上转型

System.out.println(f1 instanceof Fruit); // true

System.out.println(f1 instanceof Apple); // true

System.out.println(f1 instanceof Orange); // false

//向下转型

Apple a1 =(Apple)f1;

a1.getInfo(); //Apple *************

Fruit f2 = newFruit();

System.out.println(f2 instanceof Fruit); // true

System.out.println(f2 instanceof Apple); // false

System.out.println(f2 instanceof Orange); // false

//向下转型失败

//java.lang.ClassCastException: com.study.override.Fruit cannot be cast to com.study.override.Apple

Apple a2 =(Apple)f2;

a2.getInfo();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java bean状态_无状态和有状态企业Java Bean

我将通过Java EE 6教程,我试图了解无状态和有状态会话bean之间的区别。如果无状态会话bean不在方法调用之间保留它们的状态,为什么我的程序执行它的方式?package mybeans;import javax.ejb.LocalBean;import javax.ejb.Stateless;LocalBeanSt…

java 树的数据结构_Java数据结构之树(二叉树)

一、概述1.以二叉树为例熟悉树形结构,二叉树的定义如下:1.1.二叉树:是结点有限的集合,这个集合或者是空,或者由一个根结点或两棵互不相交的称为左子树和右子树的二叉树组成。二叉树是一个递归的定义,从中可…

java 纯面向对象_Java到底是不是一种纯面向对象语言?

原标题:Java到底是不是一种纯面向对象语言?Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它。在我刚开始学习 Java 的前面几年,我从书本里知道了 Java 是遵循 “面向对象编程范式(Object Orie…

java爬虫post 404_POST 后台404错误

今天在开发一个用户信息更新模块的时候遇到了两个问题:1、在我提交form表单的时候我希望在提交表单之后页面不刷新,同时返回更新数据2、向后台POST表单信息的时候,后台显示POST url 404的错误解决第一个问题的使用使用jquery.form的插件进行异…

java防止重复启动bat_java调用exe,及调用bat不成功的解决办法

开门见山的说,文件目录如下想调用123.exe,但是尝试了几次调用不到,然后写了个bat。初始内容如下echo offD:cd test"123.exe"双击可以运行,但是java代码无法调用,怪事。于是,辗转反侧,苦思冥想&am…

freetextbox java_FreeTextBox 增加按钮

红色部分是我自己添加上去的,它默认的文件夹是aspnet_client\FreeTextBox,所以ButtonImage这个属性是指在aspnet_client\FreeTextBox\images里的psn.gif图片。ScriptBlock 当然是指要执行的确JS事件了。其它类型的ToolbarButton有:Bold 加粗…

mysql for 语句执行顺序_MySQL使用profile分析SQL语句执行过程

分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数可以在全局和session级别来设置。对于全局级别则作用于整个MySQL实例,而session级别紧影响当前session。该参数开启后,后续执行的…

java jdbc 操作_Java:JDBC操作

内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:DriverManager类Connection接口Statement接口ResultSet接口1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");2.Connection conn Dri…

java 线程 函数_java – 从后台线程调用主线程上的函数

更新我已经更新了这个问题,使用建议的SwingWorker类包含Java实现的源代码,以实现与Objective-C示例相同的结果.希望这将有助于未来的冒险家.Document myDoc ...;Model myModel ...;SwingWorker analyzeDocument new SwingWorker() {Overridepublic Dictionary doInBackgroun…

java se5和8_javaSE_8系列博客——Java语言的特性(三)--类和对象(5)--定义方法...

以下是一个典型的定义一个方法的示例:public double calculateAnswer(double wingSpan, int numberOfEngines,double length, double grossTons) {//do the calculation here}方法声明的唯一必需元素是方法的返回类型,名称,一对括号()和大括号…

下面选项中不是开发java程序的步骤是_Java基础试题及其答案2

Java试题1) java程序中,main方法的格式正确的是()。(选择一项)a)static void main(String[] args)b)public void main(String[] args)c)public static void main(String[]s)d)public static void main(String[] args)2)给定java代码,如下:pub…

java java.doc_使用 javadoc 自动生成 Java 文档

Java 的注释,单行,多行的语法就不在赘述了。javadoc tags给 Java 源码文件书写注释,使用常见的 Java 注释可以实现一些,也可以通过如下的 Javadoc 的 Tags 来实现一些特殊的比如跳转,参数返回值等特殊标记。javadoc 标…

java增删改一键生成_easyCode(java自动生成增删改查代码)

【实例简介】读取数据库表结构 自动生成增删改查代码【实例截图】【核心代码】package com.isoftstone.autocoding;import com.isoftstone.autocoding.common.Column;import com.isoftstone.autocoding.common.Table;import com.isoftstone.autocoding.utils.CamelCaseUtils;im…

java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...

Java编程32位/64位版(jdk-jeb)是一款功能强大的计算机编程语言工具,Java技术让您可以在安全的计算环境下工作和游戏。使用 Java您可以畅玩网络游戏、与世界各地的朋友聊天、计算按揭利息,还可以在 3D 模式下浏览图像,诸多功能不一而足。软件特…

java同时关闭两个窗口_在一个窗口中同时关闭多个窗口的问题(Swing中事件多点传送的问题) | 学步园...

class A{}A中包含有:JFrame frameA;JButton btnA;class B{}B中包含有:final JFrame frameB;Static boolean wantToSave true;frameB.addWindowListener( new WindowAdapter(){pubilic void windowClosing(windowEvent we…

JAVA数组扁平化整合_5种方法实现数组扁平化

数组扁平化概念数组扁平化是指将一个多维数组变为一维数组[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]复制代码实现1. reduce遍历数组每一项,若值为数组则递归遍历,否则concat。function flatten(arr){return arr.reduce((result, item)> {retur…

java 线程由浅入深_由浅入深,Java 并发编程中的 Synchronized(一)

synchronized 作用synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。1.1 作用:确保线程互斥的访问同步代,锁自动释放,多个线程操作同个代码块或函数必须排队获得锁,保证共享变量的修改能够及时可见,获得…

java私有变量和_java – 大内部类和私有变量

有一件事我经历了几次,是一个服务类(如JBoss服务),由于助手内部类,它已经变得过大了.我还没有找到打破班级的好办法.这些助手通常是线程.这里有一个例子:/** Asset service keeps track of the Metadata about assets that live on other* systems. Complications i…

java long.max_value,Long + Long不大于Long.MAX_VALUE

If I have an assignmentLong c a b;Is there an easy way to check that a b is not bigger/smaller than Long.MAX_VALUE/Long.MIN_VALUE?解决方案Using Guava, its as simple aslong c LongMath.checkedAdd(a, b); // throws an ArithmeticException on overflowwhich …

php从内存中获取源码_PHP源码分析之变量的存储过程分解

PHP代码如下:$php_var 1;对应C的代码是:zval* c_var; //定义PHP变量指针MAKE_STD_ZVAL(c_var); //初始化PHP变量ZVAL_LONG(c_var,1) ;//赋值ZEND_SET_SYMBL( EG(active_symbol_table), " php_var ", c_var);//注册到全局变量符号表一&…