2021-05-06_JAVA基础_面向对象(2)

JAVA基础_面向对象

学习7.0

快捷键

文档注释:alt+shift+j
快捷键

在这里插入图片描述

继承性

优点:减少代码冗余; 便于功能扩展; 为多态性提供前提
格式:class A extends B{ }
A: 子类、派生类、subclass
B: 父类、超类、基类、superclass
体现:A获得B的所有的属性、方法、
特别的,父类中声明的私有的属性或方法,子类继承后,仍然可以获取,但由于封装性的问题,可能不能直接调用

子类继承父类后,还可以功能扩展

规定:

一个父类可以有多个子类;
一个子类只能有一个父类 (单继承);
可以多层继承;
子类继承父类后,可以使用直接父类和间接父类的功能;

Object 类

如果没有显示的声明一个类的父类的话,则此类继承于java.lang.Object

Debug

如何调试程序?
1、短的时候加syso
2、设置断点
在这里插入图片描述

方法的重写

子类继承父类的方法之后,可以在子类中重写方法体(方法名和参数不变)

方法的重载与重写?

1、概念?
2、规则?
3、重载:不表现为多态性;     
      重写:表现为多态性;

重写的规定:

方法的声明: 权限修饰符  返回值类型  方法名(形参列表)throws 异常的类型{   //方法体    }

1、子类重写的与父类中的方法名和参数列表一样
2、子类重写的方法的权限修饰符不小于父类中被重写的
 >> 特殊情况:子类不能重写父类中私有权限的方法
3、返回值类型:
 >>  父类被重写的方法的返回值是void,子类重写的方法也只能是void
 >>  父类被重写的方法的返回值是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类
 >>  父类被重写的方法的返回类型是基本数据类型,则子类必须相同
4、子类重写的方法抛出的异常类型 不大于 父类被重写的方法抛出的异常类型

子类和父类中同名同参数的方法,要么都声明为非static(考虑重写),要么都是static(不是重写)

super 关键字

可以理解为:父类的
可以调用:属性,方法,构造器,

调用属性方法时:不重名的时候一般可省略
子类重写后一般调用的是子类的,但是可以使用super.属性或者super.方法表明调用的是父类的

调用构造器的时候:
可以在子类的构造器中显示的使用super(形参列表)的方式,调用父类声明的构造器
必须在首行
在类的构造器中,this(形参列表)super(形参列表)只能二选一,不能同时出现
若没有显示,则默认调用的是父类中的空参构造器:super

在类的多个构造器中,至少有一个用了super(形参列表),不能全是this

继承和super的课后练习 ?
(this 和super区别练习)?

多态性(?)

理解:一个事物的多种形态
对象的多态性: Person p=new man();
父类的引用指向子类的对象(子类的对象赋给父类的引用);
当调用子父类同名同参的方法时,编译时只能调用父类,但运行时实际执行的是子类重写父类的方法;(编译看左,执行看右)
使用前提:
类的继承关系;方法的重写;

只适用于方法,不适用于属性;
虚拟方法调用

向下转型的使用

多态的逆过程
使用强制类型转换符 ()
可能出现ClassCastException异常,使用instanceof关键字进行判断
向上转型:多态

instanceof关键字

格式:a instanceof A 判断对象a是否是类A的实例。如果是,返回true,如果不是,返回false
为了避免出现ClassCastException异常,所以使用instanceof,一旦返回true ,就向下转型,若返回false,则不转
若 a instanceof A 返回true, a instanceof B也 返回true,则类B是类A的父类

Object类

Object 类是所有类的根父类
Object类的功能具有通用性
只声明了一个空参构造器
方法:

equals()
toString()
getClass()
......
equals()

1、==和equals()的区别?

1.1	==运算符
	如果比较的是基本数据类型,比较的是变量保存的数据是否相等(不一定类型要相同)
	如果比较的是引用数据类型,比较的是地址值,即两个引用是否指向同一个对象实体
	使用时左右两边类型必须一致
1.2   equals()
	只适用引用数据类型;
	在object类中,与== 相同;
	像String   Data   File  包装类等都重写了equals(),重写后比较的是两个对象的“实体内容”是否相同;

2、自定义类的equals()如何重写?
2.1 手动重写
2.2 自动生成
例:

public boolean equals(Object obj)
	{
		if(this==obj)
		{
			return true;
		}
		if(obj instanceof Customer)
		{
			Customer cust = (Customer)obj;
			if(this.age ==cust.age && this.name.equals(cust.name))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		return false;
	}

注:x.equals(null)永远返回false

toString()

当我们输出一个对象的引用时,实际上就是调用当前帝乡的toString()
像String Data File 包装类等都重写了toString(),返回实体内容
自定义类也可以重写toString()方法

可自动生成

@Override
	public String toString() {
		return "Customer [name=" + name + ", age=" + age + "]";
	}

单元测试(?)

步骤:
在这里插入图片描述

包装类(Wrapper)

提供8种基本类型对应的包装类
为了使基本数据类型具有类的特征
在这里插入图片描述

基本类型、包装类与String类之间的转换

1、基本类型----> 包装类

		int num1=10;
		//System.out.println(num1.toString);  错误
		Integer in1=new Integer(num1);
		System.out.println(in1.toString());
		
		Integer in2=new Integer("123");
		System.out.println(in2.toString());
		
		Float f1=new Float(12.2f);
		Float f1=new Float("12.2");
		System.out.println(f1);
		System.out.println(f2);
		
		Boolean b1=new Boolean(true);
		Boolean b2=new Boolean("True");
		Boolean b3=new Boolean("true123");
		System.out.println(b3); //false	

2、包装类---->基本数据类型
在这里插入图片描述
3、基本数据类型、包装类—>String类型

方式1:连接运算 String str1=num1+" ";
方式2:调用String的valueOf(Xxx xxx) String str2=String.valueOf(f1);

4、String类型—>基本数据类型、包装类
调用包装类的parseXxx(String s)
格式:int num1=Integer.parseInt(str1);
格式:boolean b1=Integer.parseBoolean(str1);

自动装箱 与 自动开箱 (基本数据类型<—>包装类)
	//1、自动装箱:  基本类型---->包装类
	int num1=10;
	Ineger in1=num1;
	boolean b1=true;
	Boolean b2=b1;
	//2、自动开箱:  包装类---->基本数据类型
	int num3=in1;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值