方法重载
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;//属性值可以可修改
}
`