继承是从已有的类创建新类的过程;
好处:1.提高代码复用性.2.提高代码维护性.3.让类与类之间产生关系,是多态的前提.
缺点:增强了类与类之间的耦合性;开发原则:高内聚,低耦合.
被继承的是父类,继承父类的叫子类.
继承使用关键字:extends
java只能单继承,但可以多层继承.
构造方法不能被继承,但实例化子类会先调用父类构造方法,调用构造方法不一定就是创建对象,但创建对象就会调用构造方法.
继承一个父类,只能继承非私有的数据(属性和方法);
protected:访问权限修饰符.在继承关系中使用,在父类中调用protected修饰的属性或方法可以被子类继承;
创建子类对象时,父类的构造方法也会被调用,为什么?
答:因为子类要使用父类的数据,那么就要通过父类的构造方法初始化数据.
如果创建子类对象会调用父类的默认构造方法.
当父类中没有无参构造方法时,子类必须显示的调用父类的带参构造方法,怎么调用呢?
可以在子类中使用super(…)调用父类的构造方法,且只能放到第一句.
overloading:方法的重载,发生在同一个类中,方法名相同,参数列表不同,与返回值无关.
overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问权限修饰符要大于或等于父类的访问权限修饰符,子类的异常声明必须小于等于父类的异常声明,
如果方法被private,static,final修饰,那么不能被重写.
1.使用super调用父类的属性,可以从父类实例处获得信息.
2.使用super调用父类的方法,可以委托父类对象帮助完成某件事情.
3.使用super调用父类中的构造方法(super(实参)形式),必须在子类构造器方法的第一句,调用父类中相应的构造方法,若不显示的写出来,默认调用父类的无参构造方法.
//从小到大排列出狗狗
class MinDog extends DogManager{
public void Min(){
//冒泡排序算法
for (int i=0;i<count-1;i++){
for (int j=0;j<count-i-1;j++){
if (hd[i].getAge()>hd[j+1].getAge()){
//使用第三变量存储数据
HomeDog min=hd[j+1];
hd[j+1]=hd[i];
hd[i]=min;
}
}
}
//打印输出排序后的数组
for (int i=0;i<count;i++){
hd[i].printl();
}
}
}
//狗狗管理类
class DogManager{
//存放狗的数组
protected HomeDog[] hd=new HomeDog[5];
//定义一个持续增加的存放数量
protected int count=0;
//添加
public void add(HomeDog h){
if (count>hd.length){
//无限扩容算法
hd=Arrays.copyOf(hd,count*3/2+1);//超过数组长度就将就数组复制给新数组,并增加一半的长度
}
hd[count]=h;
count++;
}
}
//家养狗类
class HomeDog extends Dog{
//本类构造方法
public HomeDog(String name,int age){
//super调用父类构造方法实现插入数据
super(name,age);
}
//重写父类方法
@Override
public void eat(){
System.out.println("吃肉");
}
}
//狗狗类
class Dog{
private String name;//姓名
private int age;//年龄
public Dog(String name,int age){//构造方法
this.name=name;
this.age=age;
}
public void eat(){//父类的方法
System.out.println("吃饭");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void printl(){
System.out.println("名称:"+this.name+" 年龄:"+this.age);
}
}
MinDog minDog=new MinDog();
minDog.add(new HomeDog("贝贝",10));
minDog.add(new HomeDog("佳佳",9));
minDog.add(new HomeDog("旺财",11));
minDog.add(new HomeDog("妮妮",12));
minDog.Min();
本章概述了java中继承的概念以及使用,继承是面向对象三大特征之一,本章为重点.
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!