Java基础(九)方法重写和多态

Java基础(九)方法重写和多态

回顾

1.封装

public class Student{
	public String name;
	public int age;

}

Student stu = new Student();
stu.name = "";
stu.age=1000;
public class Student{
	// 只能在本类中访问
	private String name;
	private int age;

```
// 赋值方法
public void setAge(int age){
	if(age > 100 || age < 0){
		syso(xxx);
	}else{
		this.age = age;
	}
}

// 获取值方法
public int getAge(){
	return this.age;
}
}

步骤:

  • 1.属性私有化
  • 2.提供公共的(public)修饰的getter/setter方法
  • 3.在方法中加入逻辑控制语句

2.static关键字

public class Student{
	static public String name;
	public int age;
}
  1. static修饰的是类的(所有对象共享)
  2. 非static修饰的是对象的

代码块:

// 非静态代码块/构造代码块/成员代码块
// 每一次创建对象 就进行执行
{

}

// 类加载的时候会执行  只会执行一次
// 静态代码块
static{

}

顺序:
static静态代码块 -> 构造代码块 -> 构造方法

3.继承

public class Dog extends Animal{
	

}

public class Cat extends Animal{
	

}

//抽取父类  把共同拥有的信息 抽到了父类里
public class Animal{
	public String name;
	public int age;
	public String gender;
}

Java中的继承:单继承/单根继承 符合is a的关系

本章内容

1.实现方法重写

方法重载:
方法名相同 参数列表不同 与方法的访问修饰符和返回值类型无关。

// 分别实现两个整数和两个小数的求和计算
public int getSum(int a,int b){
	return a + b;
}

public double getSum(double a , double b){
	return a+b;
}

方法重写:
出现的时机:子类继承父类后,子类发现父类的方法(太垃圾),不够强大!无法满足
子类中的需求,于是我们选择将父类的方法进行重写。

@Override // 可以检验是否是方法重写

方法重写是出现在子类中的一种方法情况。
1.子类中的方法名和参数列表和父类中的完全一样。
2.返回值类型不能大于父类中的方法
3.访问修饰符不能严于父类中的方法
4.抛出的异常不能多于且不能高于父类的方法…

2.方法重载和重写的区别

示例:
	// Pet dog  父类的引用
	// new Dog(); 子类的对象
	Pet dog = new Dog(); // 父类的引用指向子类的对象

当调用父类的方法时,(如果子类重写了父类的方法)会调用子类重写过的方法.

3.了解Object类

你编写的类 都会直接或者间接继承自Object类(超类/祖宗类)。
Object类 里拥有很多方法

 例如:
	public boolean equals(Object obj) {
        return (this == obj);
    }
 例如:
	public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

调用println()方法 实质上就在调用 toString方法。
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}

4.equals和==的区别

== 如果比较基本数据类型 比较的是数据的值。
如果比较引用数据类型 比较的是地址值

而equals()方法 是Object类型的方法默认也是比较地址值
但是String等类 进行了重写,所以比较字符串的时候equals()方法 可以比较字符串是否内容相等。

掌握重写equals()方法

5.会使用instanceof运算符

Object dog = new Dog();
Object student = new Student();
		
System.out.println(dog instanceof Student);
System.out.println(student instanceof Student);

6.会使用向上转型

//理解为自动类型转换。
示例:
double a = 10;

Pet pet = new Dog();

7.会使用向下转型

理解为强制类型转换:
示例:
int i = (int)10.9;

Dog dog = (Dog)pet;

8.多态

多态:父类的引用指向子类的对象
(多种状态)

Dog dog = new Dog();
Pet pet = new Dog();

1.父类的引用作为方法的形参
2.父类的引用作为方法的返回值类型

抽象方法和抽象类
我们发现 多个子类 在自我介绍时,介绍的内容都不相同。
所以父类里去编写内容毫无意义。但是如果将父类的自我介绍方法删除,
又没法实现多态,所以将方法定义为抽象。

抽象类里可能有抽象方法,有抽象方法的一定是抽象类。

父债子偿:父类的抽象方法子类一定要去实现(重写),如果不实现子类也是一个抽象类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值