目录
心情感悟
星期四,本来觉得在学两天就休息辣!谁能想到老师请我们一起烧烤!!!梦幻起飞!!!而且明天上午还不用起床,下午在自习,无话可说了,爽爽爽!!!
很多人一起吃烧烤很开心!一直小酌到凌晨三点,很满足!
知识点
面向对象: !!继承!!
extends:继承extends后只能有一个类。
在Java中,继承是单继承,一个子类只能有一个直接父类,但可以有多个间接父类参与一个公司架构设计时会多用到继承
其他情况少用
类与类的关系:
1、属性关系
2、参数关系
3、继承关系
创建四个类:
- 生物Biology
- 动物Animal
- 人Person
- 猫Cat
1.生物类Biology
public class Biology {
Integer age;
public Biology() {
}
public Biology(Integer age) {
this.age = age;
System.out.println("生物类的构造器...");
}
public void breath(){
}
}
2.动物类Animal
public class Animal extends Biology{
String name;
public Animal() {
}
public Animal(Integer age) {
super(age);
System.out.println("动物类的构造器...");
}
public Animal(Integer age,String name) {
super(age);
// this(age);
this.name = name;
// this(name);
}
// public Animal(String name){
// this.name = name;
// }
public void eat(){
// 调用父类的属性
age = 20;
// 调用父类的方法
breath();
// 调用当前类的属性
name = "z";
// 调用当前类的方法
// drank();
}
public void drank(String water) {
System.out.println("动物在喝" + water);
}
public String show() {
return "我们很优秀";
}
public Biology info(Biology biology) {
return null;
}
}
3.人:类Person
public class Person extends Animal{
public Person() {
}
public Person(Integer age) {
super(age);
System.out.println("人类的构造器...");
}
public void drank(String water){
System.out.println("人在喝" + water);
System.out.println("喝完了" + water + "再来一杯!");
}
public String show(){
// 返回的是我们很优秀,我们很直溜
return super.show() + "我们很直溜";
}
public Animal info(Biology animal){
return null;
}
}
4.猫Cat
public class Cat extends Animal{
public Cat(Integer age) {
super(age);
}
}
主方法:运行代码
public class Ch01 {
public static void main(String[] args) {
//这是我们定义给生物类的属性,调用一下没什么毛病
Biology biology = new Biology();
biology.age = 20;
biology.breath();
//如果我们只建立一个什么都没有Animal的类继承于Biology类,Animal也可以调用age属性和breath方法,这是继承于Biology的属性和方法
Animal animal = new Animal();
animal.age = 10;
biology.breath();
Person person = new Person();
person.age = 30;
person.name = "张三";
person.breath();
person.eat();
}
基类
Person、Cat、Animal都可以叫Biology的子类,
Animal叫做Biology的直接子类
Person、Cat叫做Biology的间接子类,Person、Cat叫做Animal的直接子类
超类
Person、Cat间接父类是Biology
Person、Cat直接父类是Animal
继承能干什么?
1、访问权限修饰符
public
protected :受保护的,不同包可以访问
默认的
private
2、性质:
- 必须写在有父类的子类里(调用属性、方法时可以省略,构造器不可以省略)
- 创建子类对象时,父类会先被实例化,再去实例化子类,当一个类被实例化市,一定会先实例化直接和间接父类
- 子类可以继承父类的属性,子类可以继承父类的方法
- 父类没有的方法和属性,子类不可能有
- 子类的构造器可以有多个,但必须和父类的构造器形式上统一
- 在调用构造器时:super和this不能同时用,只能用一个:其他可以一起用。
当使用super调用父类的构造器时,super()代码必须在第一行
this()调用本类构造器也要在第一行
所以,再构造器中需要使用super或this调用其他构造器时,只能选一个,且代码在第一行
super关键字:
在子类中代表调用父类的结构(属性,方法,构造器)
面试题
this与super的区别?this:调用的是当前类的结构(属性,方法,构造器)(调属性、方法时可以省略,构造器不可以省略)
super:调用的是父类的结构(属性,方法,构造器)(调属性、方法时可以省略,构造器不可以省略)super指向的父类,不代表任何对象
this只想的本类,代表当前对象、方法的调用者,
方法的重写(覆写、覆盖override)
方法的重写的规则:
1、方法的组成:访问权限
返回值类型
方法名
参数列表2、方法的重写***
前提:在两个类中,且为继承与被继承的关系(仅限于现在)
访问权限:重写的方法访问权限不能低于被重写的方法的访问权限(开发中一般为等于
返回值类型:重写的方法的返回值可以与被重写方法的返回值不同,但是必须是被重写的返回值的子类(子类返回值范围小于父类,开发中一般为相等的)
参数列表:参数类型,个数必须相同
抛出异常:不能抛出的异常,重写的方法不能抛出比被重写的方法更大的异常*开发中如果要重写,基本就是一模一样,主要改方法体即可*
性质:
1、可以利用父类中方法已经晕算过的结果,在结果的基础上进行扩展2、方法的重写体现的就是继承的核心,就是为了扩展父类的功能
3、子类可以重写父类的方法,做改变,之后调用的方法为重写后的方法,父类的方法不能再调用了,除了父类自己调用
面试题
重写与重载区别:
1、
重写在两个类中,且两个类有继承关系
重载在一个类中
2、
重写参数类型,个数必须相同
重载参数类型,个数必须不相同
3、
重载的方法名必须相同
重写的方法名相同且返回值类型必须相同
主方法验证代码
其他类见上文:Animal、Biology、Person
public class Ch02 {
在person类中重新定义了Animal的drank方法
调用的方法为重写后的方法,父类的方法不能再调用了,除了父类自己调用
public static void main(String[] args) {
Person person = new Person();
person.drank("江小白");
}
this关键字-返回多个返回值
在一个方法里。怎么返回多个数据类型不同的值?
对象可以有多个类型不同的属性(值),所以创建对象,返回对象
有关this的用法的链式处理
super指向父类,不代表任何对象重点:this指向本类,"***代表当前类的对象***"或方法的调用者
比如我在一个类中定义了Person类的一个person对象,那么Person类中的this就可以代表person
当用person调用Person类的方法进行赋值操作时,如果该方法的返回值为this,this代表当前类的对象,相当于返回了一个person
即“person调用Person类的方法进行赋值”这个操作可以当成person继续调用方法例如:
Person类中:
public Person setName(String name) {
this.name = name;
return this;
}
在其他类调用时:
public void show(Ch01 ch01){
}
public static void main(String[] args) {
Ch01 ch01 = new Ch01();
ch01 = ch01.info("abcd", 20);
System.out.println(ch01.getName() + ch01.getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}