22.面向对象特征之二: 继  承     2020-04-29  21:39:33

01.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么子类无需再定义这些属性和行为,只要继承父类即可。

02.定义方法:

//定义父类

public classPerson {publicString name;public intage;publicString getInfo() {...}

}//使用extends关键字定义继承的子类,意即对父类的"扩展".

public class Student extendsPerson{publicString school;

}

//Student类继承了父类Person的所有属性和方法,并增加了一个属性school.

//Person中的属性和方法,Student都可以利用.

//如果子类和父类不在同一个包下,子类只能使用父类中public和protected修饰的成员

03.继承的出现提高了代码的复用性。

继承的出现让类与类之间产生了关系,提供了多态的前提。

不要仅为了获取其他类中某个功能而去继承,继承的类之间应该有逻辑性

子类不能直接访问父类中私有的(private)的成员变量和方法,应通过setter、getter方法访问

04.一个子类只能有一个父类,一个父类可以派生出多个子类,Java支持多层继承,但不支持一个子类多个父类这样的    多重继承

05.方法的重写(override)

(1).在子类中可以根据需要对从父类中继承来的方法进行改造,子类的方法将覆盖父类的方法,称重写。

(2).方法重写时的注意:

a.重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。

b.重写方法不能使用比被重写方法更严格的访问权限。

c.重写和被重写的方法须同时为static的,或同时为非static的

d.子类方法抛出的异常不能大于父类被重写方法的异常

(3).重写示例代码:

public classPerson {publicString name;public intage;publicString getInfo() {return "Name: "+ name + "\n" +"age: "+age;

}

}public class Student extendsPerson {publicString school;public String getInfo() { //重写方法

return "Name: "+ name + "\nage: "+age+ "\nschool: "+school;

}

}

(4).在eclipse中可以使用快捷键 Alt+/ 选择override进行快速重写。

23.关键字super

01.super可用于访问父类中定义的属性,方法,以及父类的构造函数.

02.    a.尤其当子父类出现同名成员时,可以用super进行区分

b.super的追溯不仅限于直接父类,还可以调用子类之上的所有父类

c.super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

03.使用方法:可以使用 super.+父类成员 进行调用。

04.注意:

a.子类中所有的构造器默认都会访问父类中空参数的构造器

b.当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语 句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行

c.如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

代码示例:

//父类

public classPerson {

privateString name; private intage; privateDate birthDate;

public Person(String name, intage, Date d) { this.name =name; this.age =age; this.birthDate =d;} public Person(String name, intage) { this(name, age, null);} publicPerson(String name, Date d) { this(name, 30, d);} publicPerson(String name) { this(name, 30);}

}//调用父类

public class Student extendsPerson { privateString school;

public Student(String name, intage, String s) { super(name, age); school =s;} publicStudent(String name, String s) { super(name); school =s;} public Student(String s) { //编译出错: no super(),系统将调用父类

无参数的构造方法。 school =s;} }

24.this和super的区别

25.面向对象的特征之三:多态性

(1)Java中多态性的两种体现:

01.方法的重载(overload)和重写(overwrite).

a.重载:本类中允许同名方法存在,体现相同的方法实现不同的逻辑

b.重写:子类对父类方法的覆盖,子类可以使用和父类相同的方法名,覆盖掉父类的逻辑

02.对象的多态性 --子类的对象可以替代父类的对象使用,可以直接应用在抽象类和接口上.

03.Java引用变量有两个类型:

编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。若编译时类型和运行时类型不一致,就出现多态(Polymorphism)

(2)对象的多态性:

01.一个变量只能有一种确定的数据类型,但一个引用类型变量可能指向(引用)多种不同类型的对象

示例:

Person p = new Person();

Person e = new Student(); // Person类型的变量e,指向Student类型的对象

02.子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting).

即子类的对象可以给父类类型的变量作为引用

03.一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,

那么该变量就不能再访问子类中添加的属性和方法

示例:

Student m = new Student();

m.school = “pku”;     //合法,Student类有school成员变量

Person e = new Student();

e.school = “pku”;    //非法,Person类没有school成员变量

//属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编译错误。

04.虚拟方法调用

//正常的方法调用

Person p = new Person();

p.getInfo();

Student s = new Student();

s.getInfo();

//虚拟方法调用(多态情况下)

Person e = new Student();

e.getInfo();    //调用Student类的getInfo()方法

//编译时类型和运行时类型编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。

//Java的方法是运行在栈内存中的,在运行方法时会动态进栈和出栈--动态绑定.

(3)多态小结:

前提:

需要存在继承或者实现关系

要有覆盖操作

成员方法:

编译时:要查看引用变量所属的类中是否有所调用的方法.

运行时:调用实际对象所属的类中的重写方法.

成员方法的多态性,也就是多态绑定,必须在有方法的重写前提下才能进行.

成员变量:

不具备多态性,只看引用变量所属的类.

26.instanceof操作符

01.x instanceof A:检验x是否为类A的对象,返回值为boolean型.

02.要求x所属的类与类A必须是子类和父类的关系,否则编译错误.

03.如果x属于类A的子类B,x instanceof  A值也为true.

27.Object类

01.Object类是所有Java类的根父类(基类).

在多层继承中处于最高层的父类一定是Object类

02.如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类

public class Person {

...

}

//等价于:

public class Person extends Object {

...

}

03.可以用于接收作为参数的类.

//示例:

method(Object obj){…}//可以接收任何类作为其参数

Person o=new Person();

method(o);

04.Object类中的方法

Object是所有类的父类,子类可以调用父类的方法,所以Object中的方法在其他所有类中都可以使用 对象.方法()

方法列表:

num 方法 类型描述

apublic Object()构造构造方法

bpublic boolean equals(Object obj)普通对象比较

cpublic int hashCode()普通取得Hash码

dpublic String toString()普通对象打印时调用

28.对象类型转换(Casting)

01.对Java对象的强制类型转换称为造型

a.从子类到父类的类型转换可以自动进行

b.从父类到子类的类型转换必须通过造型(强制类型转换)实现

c.无继承关系的引用类型间的转换是非法的

d.String类是Object类的子类,所以也满足上面的法则

对象类型转换代码示例:

public class Test{

public void method(Person e){     //设Person类中没有getschool()                        方法

// System.out.pritnln(e.getschool());   //非法,编译时错误,因为e在形参传入时是Person类的对象,没有.getschool()方法,应该进行判断和转换

if(e  instanceof  Student){

Student me = (Student)e;    //将e强制转换为Student类型

System.out.pritnln(me.getschool());

}

}

public static  void main(Stirng args[]){

Test t = new Test();

Student m = new Student();

t.method(m);

}

}

29.==操作符与equals方法

01. ==操作符

a.基本类型比较值:只要两个变量的值相等,即为true.

b.引用类型比较引用(是否指向同一个对象):只有指向同一个对象时(在内存中的地址),==才返回true.

c.用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错.

02.equals()方法

a.所有类都继承了Object,也就获得了equals()方法。还可以重写.

b.只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象(地址)

c.调用格式:obj1.equals(obj2)

d.特例:当用equals()方法进行比较时,对类File、String、Date及包装类来说,因为在这些类中重写了Object类的equals()方法,所以比较的是类型及内容,而不是引用的是否是同一个对象.

30.String对象的创建

31.toString()方法

01.toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。

02.打印对象时,默认输出对象的内存地址,即输出 对象.toString()

32.包装类(Wrapper)

01.针对八种基本定义相应的引用类型—包装类(封装类)

02.基本数据类的包装类主要用于基本数据类型与字符串之间的转换

03.基本数据类型的实例化转为对应的包装类后,就有了类的特点,就可以调用类中的方法。

基础数据类型对应包装类列表

基本数据类型包装类

booleanBoolean

byteByte

shortShort

intInteger

longLong

charCharacter

floatFloat

doubleDouble

04.基本数据类型包装成包装类   ---装箱

//通过包装类的构造器实现:

int i = 500;   Integer t = new Integer(i);

//还可以通过字符串参数构造包装类对象:

Float f = new Float(“4.56”);

05.获得包装类对象中包装的基本类型变量    ---拆箱

//调用包装类的.xxxValue()方法:

boolean b = bObj.booleanValue();

06.JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配。

07.使用包装类进行字符串与基本数据类型之间的转换.

a.字符串转换成基本数据类型

//通过包装类的构造器实现:

int i = new Integer(“12”);

//通过包装类的parseXxx(String s)静态方法:

Float f = Float.parseFloat(“12.1”);

b.基本数据类型转换成字符串

//调用字符串重载的valueOf()方法:

String fstr = String.valueOf(2.34f);

//更直接的方式:

String intStr = 5 + “”;

java 动态称重_Java面向对象 --2相关推荐

  1. 年龄是计数还是计量_电子皮带秤是静态称重还是动态称重?

    很多人不知道电子皮带秤是静态称重还是动态称重,其实有这个问题,归根到底是因为不理解何为静态称重,何为动态称重,以及对于电子皮带秤的工作方式不理解. 按照"国际法制计量组织OIML" ...

  2. 皮带秤 算法_改进型卡尔曼滤波算法在电子皮带秤动态称重中的应用.PDF

    改进型卡尔曼滤波算法在电子皮带秤动态称重中的应用.PDF 改进型卡尔曼滤波算法在电子皮带秤动态称重中的应用 江苏省计量科学研究院 李冰莹,马宇明,王海涛 南京理工大学 机械工程学院 李永新,葛方丽 [ ...

  3. 包裹动态称重扫码测体积快手台DWS的开发和源码

    包裹动态称重扫码测体积快手台DWS的开发和源码 前言 我之前写过一篇关于包裹静态称重扫码测体积快手台DWS的文章,在那篇文章里,我介绍了静态扫码称重测体积的主要设备以及原理.今天这篇文章,主要是介绍包 ...

  4. 四信⾼速动态称重治超系统 不停车超载预检

    随着交通运输行业的飞速发展,违法超载现象屡见不鲜,对公路.桥梁等造成了严重破坏,且容易引发交通事故.因此,有必要采用超载治理模式,有效延伸超限检测站管理上的时空范围.缓解执法力量不足的矛盾,以便进一步 ...

  5. c语言 称重系统设计,动态称重系统设计.doc

    动态称重系统设计 摘 要 目前我国经济正处于一个高速发展的阶段,人们的生活质量日益提高,财产也慢慢积累,渐渐富裕起来,买车的人也越来越多(家用车,客车,货车),但是随之而来的是一系列严峻而又急需要解决 ...

  6. 新超重车辆高速动态称重系统设计方案

    2021年最新超重车辆高速动态称重系统设计方案(专业完整版).pdf-Actionscript文档类资源-CSDN下载

  7. 超重车辆高速动态称重系统设计方案

    2021年最新超重车辆高速动态称重系统设计方案(专业完整版).pdf-Actionscript文档类资源-CSDN下载

  8. 最新超重车辆高速动态称重系统设计方案

    2021年最新超重车辆高速动态称重系统设计方案(专业完整版).pdf-Actionscript文档类资源-CSDN下载

  9. java类的心得_java面向对象学习心得3篇

    日记网 >> 专题 java面向对象学习心得3篇 更新时间:2018/6/15 8:27:00  点击率:937  手机版 java面向对象学习心得3篇来自简单日记网精选推荐.在面向对象的 ...

最新文章

  1. 第五次作业:四则运算之升级
  2. day06_方法_20150806
  3. JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑
  4. 计算机文化基础 电大,电大计算机文化基础形考一答案
  5. 进入IT行业,要不要参加培训班?
  6. SQL:JOIN ON
  7. Spark shuffle:hash和sort性能对比
  8. 到 2022 年,75% 的数据库将托管在云端
  9. flask v0.1 项目工程
  10. java旅客接口_GitHub - s1mplecc/checkin-scheduler: 使用 Java 实现的旅客人数分布预估与值机排班调度算法...
  11. Linux 与 Windows 计算文件夹大小
  12. pymysql执行有参数的in语句
  13. Stm32是用C语言编程吗,stm32编程软件是什么 stm32用什么软件编程
  14. Theano框架学习
  15. 破解双中台困局:万家数科 x StarRocks 数字化技术实践
  16. 服务器系统怎么用主板做RAID,超微主板怎么创建RAID磁盘阵列 服务器组建RAID0、RAID1图文教程...
  17. TCP粘包/拆包问题
  18. 给百度地图每个市添加颜色
  19. C++:最小化多个变量的标量函数 使用Nelder-Mead算法(附完整源码)
  20. 微信小程序订单语音播报

热门文章

  1. 谷歌浏览器自动翻译问题
  2. 浏览器插件的开发学习
  3. HCIA脱产班 学习笔记4
  4. Axure 真正的解决跳转事件无效
  5. 关于unity物体移动穿墙问题。
  6. Teststand-控件
  7. Tomcat日志配置远程Syslog采集
  8. BAT 脚本转 EXE 工具
  9. 太阳能发电机的优缺点是什么?
  10. STM32模拟串口驱动(带校验位)