Java继承

方法重载

1、在同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型满足其中一个不同即可)
3、方法返回值和访问修饰符任意
4、与方法的参数名无关

方法重写

1、有继承关系
2、返回值类型、方法名、参数列表与父类继承的方法完全一致(方法返回值允许是子类类型,返回值与父类兼容)

public Animal Create(){
 return new Animal();
}

@Override
public Dog Create() {
 return new Dog();
}

3、访问修饰符允许有变化(子类的访问范围必须大于等于父类的访问范围:儿子比老子强
4、与方法的参数名无关(可修改参数名)
注意:方法重写适用于方法,但在父类中也可以定义与父类重名的属性

继承

1、子类不能选择性地继承父类,继承所有
2、子类可以访问父类非私有成员
3、父类不可以访问子类特有成员

访问修饰符(本类内都可访问)不能修饰方法内局部变量

1、private 只允许在本类内访问**(子类也不可访问)**
2、default 同包子类和同包非子类可访问**(必须满足同包)**
3、protected 同包子类、同包非子类、跨包子类可访问**(同包和子类满足一个即可)**
4、public 允许在任意位置

父类修饰符只能是public 或默认,不允许protected

super(代表父类引用)

1、访问父类成员方法
2、访问父类属性
3、访问父类构造函数
如在测试类中调用eat()/name,首先调用自己重写的方法/变量,加上super即可用于访问父类中允许被子类访问的任意成员

父类的构造方法

父类的构造方法不允许被继承、不允许被重写,但会影响子类对象的实例化

this.Animal();

报错

继承的初始化顺序:
加载类:
1、加载父类的静态成员
2、加载子类的静态成员
(包括静态代码块和静态成员属性,访问修饰符不影响静态成员的加载顺序,跟书写位置有关)
加载后有默认值,加载完毕后进行实例化构造:
3、父类的成员属性
4、父类的构造代码块
5、父类的构造函数
6、子类的成员属性
7、子类的构造代码块
8、子类的构造函数

子类选择父类的构造方法

1、子类的构造的过程中必须调用其父类的构造方法,如子类的带参构造默认调用父类的无参构造
2、可以通过super()调用父类允许被访问的其他构造方法,必须在构造方法中使用super()
3、super(month,name)必须放在第一行

在这里插入图片描述

super与this对比

1、super表示父类对象,this表示当前对象
2、均不允许被静态方法调用
3、this、super都必须被放在第一行,因此不能并存

4、构造方法只能在构造方法之间使用

Object类

1、Object是所有类的父类
2、一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组)
3、Java中每个类都可以使用Object类中定义的方法

子类重写Object类的equals方法

1、直接继承Object中的equals方法时,比较的是两个引用是否指向同一个对象

2、==比较的也是两个引用是否指向同一个对象

Animal animal1=new Animal("花花",5);
Animal animal3=animal1;
Animal animal2=new Animal("花花",5);
System.out.println(animal1.equals(animal2));//继承Object中的equals方法时,比较的是两个引用是否指向同一个对象
System.out.println(animal1.equals(animal3));
System.out.println(animal1==animal2);
String str=new String("str1");
String str3=new String("str1");
String str1="str1";
String str2="str1";//继承Object的String类重写了equals方法,比较的字符串的内容(子类可以通过重写equals方法的形式,改变比较的内容)
System.out.println(str1.equals(str2));
System.out.println(str.equals(str3));
System.out.println(str1==str2);//指向相同空间
System.out.println(str==str3);//指向不同空间,true

3、String str1=new String(“str”);
Object的子类String重写了equals方法,比较的字符串的内容

String通过对象实例化赋值后,指向不同空间
String通过字面量赋值后,指向相同空间,经过==比较

子类重写Object类的toString方法

1、输出对象名默认调用对应的toString方法,输出类名+@+内存地址哈希值

System.out.println(str.toString());
System.out.println(str3);//继承Object的String类重写了toString方法,子类可以通过重写方法,改变输出的内容及表现形式```

```java
在这里插入代码片

final:不允许被继承、重写、修改(不能用于修饰构造函数,构造函数除访问修饰符外不允许添加其他修饰符)

1、final类:不允许被继承 :public final 或final public
2、final方法:不允许被子类进行重写,但不影响子类继承使用
3、final变量(基本数据类型):不允许被修改,不同于static,final可用于局部变量之前
final变量分为类中成员属性和方法内局部变量
类中成员属性赋值过程包括:在定义时直接初始化、若在定义时没有直接赋值,则只能在构造方法或构造代码块中进行赋值
方法内局部变量只要在具体被使用之前进行赋值即可,一旦被赋值不允许被修改

4、final变量(引用数据类型):类、String、数组等


```java
public void eat(String name){
    System.out.println(name+"别吃了");
    final Animal animal=new Animal("芳芳",1);
    animal=new Animal();//引用不能更改
    animal.month=12;//属性值可以可修改
}

`

使用static final修饰:不允许被修改,且为全局变量,随着类加载而产生,在程序运行过程中不允许被修改,如修饰配置信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值