java集成_Java继承

一.继承

1.简介:

40cd48043c2891aefb671dd07af754f5.png

特点:利于代码复用;缩短开发周期。注:子类不能直接访问父类的私有属性

满足“A is a B”的关系就可以形成继承关系

例:

父类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.swpu.animals;2

3 public classAnimal {4 //属性

5 privateString name;6 private intmonth;7 privateString species;8 publicString getName() {9 returnname;10 }11 public voidsetName(String name) {12 this.name =name;13 }14 public intgetMonth() {15 returnmonth;16 }17 public void setMonth(intmonth) {18 this.month =month;19 }20 publicString getSpecies() {21 returnspecies;22 }23 public voidsetSpecies(String species) {24 this.species =species;25 }26

27 public voideat(){28 System.out.println("吃东西了");29 }30

31 }

View Code

子类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.swpu.animals;2

3 public class Dog extendsAnimal {4 private intweight;5 public void setWeight(intweight){6 this.weight=weight;7 }8 public intgetWeight(){9 return this.weight;10 }11 public voidrun(){12 System.out.println("我是名叫"+this.getName()+"的"+this.getSpecies()+"在奔跑");13 }14

15 }

View Code

2.方法重写:

语法规则:返回值类型,方法名,参数类型、顺序、个数都要和父类继承的方法相同。

注:方法重写必须要在有继承关系的子类中;

方法名相同,参数列表相同(参数顺序,个数,类型),方法返回值相同(可以允许是子类类型【向下兼容】);

方法的访问修饰符是可以允许有变化的,但是访问范围要大于等于父类的访问范围;

方法的重写与方法的参数名无关;

在Java中仅限方法重写,无属性重写,但是在子类中,可以定义与父类重名的属性的。

子类重写了父类的方法后,子类对象调用的是重写后的方法。

二.访问修饰符的分类与作用

private:只允许在本类中进行访问;

public:允许在任意位置访问;

protected:允许在当前类,同包子类/非子类,跨包子类访问,跨包非子类不允许;

默认:允许在当前类,同包子类/非子类;跨包子类/非子类不允许调用

577ba21459914ab8c40edca02bcdff0d.png

三.super关键字:父类对象的引用

注:Python中super()是一个函数,并不是直接调用父类,而是根据MRO算法的调用顺序。

对比Python的继承初始化顺序(未调用super):父类的静态成员——>子类静态成员——>子类构造(实例化不会调用父类构造,调用super函数会遵照MRO【Pythoh3后是C3】算法的顺序调用)【注:如果是多继承则按照每个继承从父类往低层的顺序】

60b4b624781f5589314142e46d25d5bf.png

1.Java中的super:

访问父类成员方法:super.print();

访问父类属性:super.name;

访问父类构造方法:super()

Java中利用super关键字调用父类的方法和属性

父类的构造方法不允许被继承,不允许被重写,但是会影响子类对象的实例化(子类构造默认调用的是父类的无参构造)

2.继承的初始化顺序:

父类的静态成员(多个父类,从最顶层父类按顺序执行【注访问修饰符不影响成员的加载顺序,跟书写位置有关】)——>子类静态成员——>父类对象构造——>子类对象构造

注:子类构造默认调用的是父类的无参构造,可以通过super()调用父类允许被访问的其他构造方法【必须放在子类有效构造方法的第一行】

c2bea374fba4a72ca1cbe7c73f63338e.png

c4a67ebb10a48a9c4169f05b6d1cc8da.png

注意:

b0212a751d1847566ea26b0fcf1bcf86.png

539cb9f58db46980c9c93290b9ef28f7.png

三.super和this对比

ca3d91c439014322b9f7817302523c8f.png

注:构造方法调用时,super和this不能同时出现(都要在第一行)

四.方法重写和方法重载的对比

0b09233272602d0be8190fc25c7b92bd.png

五.Object类

09d98eaaca9a57e9a34b6784374a0dea.png

1.Object中常用的方法:

1.1equals方法:

equals():直接继承Object中的equals()方法时,比较的是两个引用是否指向的是同一个对象(相当于Python中的is);

子类可以通过重写equals方法的形式,改变比较的内容;

如果是String中的equals(重写了Object中的equals,判断的是两个值是否相等)

重写equals:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.swpu.test;2 importcom.swpu.animals.Animal;3

4 public classTest3 {5 public static voidmain(String[] args){6 Animal one=new Animal("哈哈",20);7 Animal two=new Animal("哈哈",20);8 boolean flag=one.equals(two);9 //==判断的是是否是同一空间

10 System.out.println("one 和 two的引用比较:"+flag);11 System.out.println("one 和two 的引用比较:"+(one==two));12 String str1=new String("hello");13 String str2=new String("hello");14 boolean flag2=str1.equals(str2);15 System.out.println("str1 和 str2的引用比较:"+flag2);16 System.out.println("str1 和str2 的引用比较:"+(str1==str2));17 /**

18 * 输出:19 * one 和 two的引用比较:false20 one 和two 的值比较:false21 str1 和 str2的引用比较:true22 str1 和str2 的值比较:false23 */

24

25 }26

27

28 }

View Code

1.2toString方法:

输出对象时,默认自动调用toString方法,相当于Python的__repr__或__str__魔法函数;

继承Object中的toString方法时,输出对象的字符串表现形式为:类型信息+@+地址信息(通过hash计算)【如:com.swpu.animals.Animal@15db9742】

重写toString方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //重写toString方法

2 publicString toString(){3 return "姓名:"+this.getName()+"月份:"+this.getMonth();4 }5

View Code

六.final关键字

final class:该类没有子类(public final class;final public class);

final 方法:该方法不允许被子类重写,但是可以被子类正常继承使用;

final 方法内局部变量:只要在具体被使用之前进行赋值即可,一旦赋值,不能进行修改;

final 类中成员属性:赋值场景:1.定义直接初始化;2.构造方法;3.构造代码块;

构造方法不允许用final修饰。

注:

基本数据类型的变量:初始赋值后不能被修改

引用数据类型:初始化之后不能在指向另一个对象,但对象的内容是可以变的;

final可以和static配合使用(方法,变量):通过final修饰可以提高性能,但会减低扩展性

七.注解介绍

d2af58a4cf53fd09413f47c44ee7e08c.png

6e5430386dc2a709f69928764724d5b7.png

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

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

相关文章

查找任意数目参数的最大值

查找任意数目参数的最大值 原文:查找任意数目参数的最大值《C和指针》第7章第4道编程题: 编写一个名叫max_list的函数,它用于检查任意数目的整型参数并返回它们中的最大值。参数列表必须以一个负值结尾,提示列表的结束。 1 /*2 ** 查找任意数…

如何以大数据的JAX-RS响应的形式将JPA结果流化/序列化

有时,有必要通过JPA检索大型数据集(例如,超过1,000,000条记录),并将它们填充到java.util.List的单个实例中是有风险的(内存障碍)。 因此,这是一个快速的解决方案,它可以解…

Tab标签页接口---使用Intent对象

TabHost tabHost getTabHost();Intent it new Intent();it.setClass(Main.this, DateTimePicker.class);TabSpec spectabHost.newTabSpec("tab1");spec.setContent(it);spec.setIndicator("ら戳㎝丁",getResources().getDrawable(android.R.drawable.i…

java猜数字小游戏_Java实现简单猜数字小游戏

本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下完成猜数字游戏需要实现以下几点:获得一个随机数作为“答案数”; 输入数字,与“答案数”作比较(判断大了,小了,相等…

要看的东西

udp发送、接受 tcp 客户端 服务端 http(servlet) http post http get web service cookies session 多线程 io流 集合list set map:循环、迭代器 jmeter、soapui、webdriver、python转载于:https://www.cnblogs.com/stay-sober/p/4158837.h…

简单的基准测试:不可变集合VS持久集合

通常,您需要向集合中添加新元素。 因为您是一个优秀而谨慎的开发人员,所以您希望尽可能保持不变。 因此,向不可变集合中添加新元素将意味着您必须创建一个新的不可变集合,其中包含原始集合的所有元素以及新元素。 您可以使用gua…

java list 合并去重_java 怎么把多个list 合并成一个去掉重复的

展开全部示例代码636f707962616964757a686964616f31333361313838:public static void main(String[] args){List list1 new ArrayList();list1.add(1);list1.add(2);list1.add(3);list1.add(4);List list2 new ArrayList();list2.add(1);list2.add(4);list2.add(7);list2.add…

UITextField实现左侧空出一定的边距

就是通过uitextfield的leftview来实现的,同时要设置leftviewmode。 如果设置左右边距,需要再加上rightView功能 -(void)setTextFieldLeftPadding:(UITextField *)textField forWidth:(CGFloat)leftWidth {CGRect frame textField.frame;frame.size.widt…

java软件工程师 英文简历_2017java程序员英文简历范文

2017java程序员英文简历范文简历写完以后,再检查一下你的简历是否回答了以下问题:它是否清楚并能够让雇主尽快知道你的能力?是否写清了你的能力?是否写清了你要求这份工作的.基础?有东西可删除吗?尽力完善你的简历直到最好。2017java程序员英文简历范…

写给java web一年左右工作经验的人

摘要 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区。 ps:图片都是从网上盗。。。感谢原作者。 ps:文字千真万确都是我自己写的。 在此&am…

FlexyPool如何支持Dropwizard Metrics包重命名

介绍 FlexyPool严重依赖Dropwizard (以前是Codahale)度量标准来监视连接池的使用情况 。 集成到Dropwizard中后,程序包名称必然会被重命名 。 因此,4.0.0版本将使用io.dropwizard.metrics软件包名称代替com.codahale.metrics 。 …

java网络编程与分布式计算_Java网络编程与分布式计算

基本信息书名:Java网络编程与分布式计算定价:38.00元作者:[澳]赖利出版社:机械工业出版社出版日期:2003-03-00ISBN:9787111115786字数:页码:版次:装帧:开本:编辑推荐内容…

java ref 应用类型_Java四种引用类型

Java四种引用类型在java中,类型就分为两种,基本类型和引用类型或自定义类型。引用类型又分为四种:强引用 StrongReference软引用 SoftReference若引用 WeakReference虚引用 PhantomReference划分这些类型的目的是:是为了更灵活的管…

嵌入式Linux学习笔记

一 嵌入式系统定义: 应用于特定环境的硬件体系。 二 两样非常重要的能力: 1. 掌握各种新概念的能力 2. 调试的能力( 包括软件, 硬件 ) 三 需要的基础知识: 1. 操作系统理论基础 2. 数据结构 3. C,C编程语言 4. 汇编语言 5. Linux基…

java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小

简介之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。数组先看下JOL的代码和输…

maven osgi_OSGi将Maven与Equinox结合使用

maven osgi很长时间以来,我一直在努力理解OSGi的真正含义。 它已经存在很长时间了,但是没有多少人意识到这一点。 它被炒作是一种非常复杂的技术。 这是我为所有Java开发人员简化的尝试。 简而言之, OSGi是一组规范,这些规范支持模…

java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu

这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种:1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来&#xff…

Linux安装、卸载软件

在linux环境中,尤其是cenos中安装过一些软件,一般是二进制安装与源码安装,现小结一下linux中的安装与卸载。 一、通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具t…

java绘制_Java 绘制简单图形的问题

代码能运行成功但东西出不来能帮忙看下代码吗?.O_O.importjava.awt.Color;importjava.awt.Graphics2D;importjavax.swing.JComponent;importjavax.swing.JFrame;importjava.awt.geom....代码 能运行成功 但东西出不来 能帮忙看下代码吗?.O_O.import java…

SonarQube中的Maven项目的单元和集成测试报告

自SonarQube 4.2起。 测试报告不是在Maven构建期间由Sonar Maven插件生成的(请参阅SonarQube的博客文章 )。 因此,在Sonar Maven插件收集SonarQube服务器的信息之前,必须由另一个插件生成测试报告。 在这里,Jacoco Mav…