一、继承;
1、从动物的角度去看待继承关系;
2、动物可以分为哺乳动物和爬行动物;哺乳动物又可以分为狗、猫、人等;爬行动物又可以 分为蛇和鳄鱼等;这就是动物世界的继承关系;我们的代码也是一样;
3、因为我们的代码有重复的代码,可以将重复大妈抽取到父类中,从而实现代码的优化;
4、那我们使用继承优化以后就可以实现:方便修改代码;减少代码量的结果;
5、子类和父类是一种is-a的关系;
6、类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模;
7、使用继承可以提高代码的复用性;
8、extends的意思是”扩展“。子类是父类的扩展
9、不同的叫法:超类、父类、基类、子类、派生类;
10、我们使用继承的方法就是先编写父类,再编写子类,子类只能继承一个父类;
11、继承的示例代码:
public class ExtendsDemo {
public static void main(String[] args) {
Mammal m1 = new Mammal();
m1.puru();
m1.eat();
}
}
class Animal{
String eyes = "眼睛";
String name = "无名";
public void eat(){
System.out.println("动物吃东西!");
}
}
class Mammal extends Animal{
//哺乳动物
public void puru(){
eyes = "嘴巴";
System.out.println("小动物用"+eyes+"吃奶");
}
}
二、super关键字;
1、super是直接父类对象的引用;
2、可以通过super来访问父类中被子类覆盖的方法或属性;
3、普通方法中使用:没有顺序限制,可以随便调用;
4、构造函数中:任何类的构造函数中,若是构造函数的第一行代码没有显示调用super();那 么Java默认都会调用super();作为父类的初始化函数,所以这里的super();代码加不加都无 所谓;
5、super示例代码:
public class SuperDemo {
public static void main(String[] args) {
new ChildClass().f();
}
}
class FatherClass{
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass{
public int value;
public void f(){
super.f();
value =200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value);
}
}
三、理解继承;
1、子类访问父类成员;访问父类构造方法在子类中使用super关键字super代表父类对象;
2、super在子类方法中调用且必须是第一行语句
3、子类不能继承的父类成员:①不能直接访问private成员;②子类与父类不在同包使用默认 访问权限的成员;③构造方法;
4、多重继承关系初始化顺序:①父类属性;②父类构造方法;③子类属性;④子类构造方法
5、使用继承需要符合is-a关系的设计使用继承;
6、继承是代码重用的一种方式,将子类共有的属性和行为放到父类中;
7、示例代码:
public class BusDemo {
public static void main(String[] args) {
Bus bus = new Bus(20);
bus.print();
}
}
class Car{
private int site = 4;
Car(){
System.out.println("载客量是"+site+"人");
}
public void setSite(int site){
this.site = site;
}
void print(){
System.out.println("载客量是"+site+"人");
}
}
class Bus extends Car{
Bus(int site){
setSite(site);
}
}
四、方法重写;
1、在子类中可以根据需要对从基类中继承来的方法进行重写;
2、重写方法必须和被重写方法具有相同的名称、参数列表和返回值类型;
3、重写方法不能使用比被重写方法更严格的访问权限;
4、构造方法不被子类继承所以不能实现重写;
5、重写示例代码:
public class OverrideDemo {
public static void main(String[] args) {
AnimalOne animal = new AnimalOne();
animal.shout();
DogOne dog = new DogOne();
dog.shout();
}
}
class AnimalOne{
void shout(){
System.out.println("发出声音!");
}
}
class DogOne extends AnimalOne{
void shout(){
System.out.println("汪汪汪!");
}
}
五、总结;
1、通过继承可以简化类的定义,实现代码的重用;
2、子类继承父类的成员变量和成员方法,但不继承父类的构造方法;
3、Java中只有单继承,没有像c++那样的多继承
4、Java需要实现多继承可以通过接口;
5、如果定义一个父类没有使用extends,则他的父类是:java.lang.Object;
6、方法重写的规则:方法名相同;参数列表相同;返回值类型相同或者是其子类;访问权限 不能高于父类;
7、super只能出现在子类的方法和构造方法中;
8、super调用构造方法时,只能是第一句;
9、super和this不能同时出现在构造方法中;
10、super不能访问父类中的private成员;
11、super和this都不能在static方法中;