继承小结
- 继承发生在多个类之间
- 继承使用关键字extends
- JAVA只能单继承,允许多层继承
- 被继承的类叫父类(超类),继承父类的叫子类(派生类)
- 在父类中的非私有属性和方法可以被子类继承
- protected(受保护的访问权限修饰符),修饰的属性或方法可以被子类继承
- 构造方法不能被继承
- 创建对象会调用构造方法,调用构造方法不一定就是创建对象
- 实例化子类对象,会先调用父类构造方法,如果父类中没有构造方法,那么子类必须显示的通过supur(...)来调用父类的带参构造方法,super(这个关键字可以理解为“父类”)也只能在子类构造方法的第一句
//第9点:
public class Demo1
{
public static void main(String[] args)
{
HomeDog homeDog = new HomeDog();
homeDog.print();
}
}
class Dog
{
protected String name;
private String sex;
public Dog(String name, String sex)
{
this.name = name;
this.sex = sex;
System.out.println("我是Dog的构造方法");
}
public void eat()
{
System.out.println("吃饭");
}
}
class HomeDog extends Dog
{
//类的定义;
public void print()
{
System.out.println(name + "我是一只家狗,汪!");
}
}
class HuskyDog extends Dog//HuskyDog:哈士奇狗
{
//类的定义;
public void show()
{
System.out.println(name + "我是一只Husky狗,我会作秀。");
}
}
/*
结果(在Dog类中的构造方法里有两个参数,Dog类中没有无参的了,就会报错):
E:\Java\千峰教育\Demo1.java:26: 错误: 无法将类 Dog中的构造器 Dog应用到给定类型;
class HomeDog extends Dog
^
需要: String,String
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
E:\Java\千峰教育\Demo1.java:35: 错误: 无法将类 Dog中的构造器 Dog应用到给定类型;
class HuskyDog extends Dog//HuskyDog:哈士奇狗
^
需要: String,String
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
2 个错误
*/
现在无法给HomeDog类和HuskyDog类传参,这时候要在这两个子类中添加构造方法,跟父类的一样。
public class Demo1
{
public static void main(String[] args)
{
HomeDog homeDog = new HomeDog("咯咯哒", "公");
homeDog.print();
}
}
class Dog
{
protected String name;
private String sex;
public Dog(String name, String sex)
{
this.name = name;
this.sex = sex;
System.out.println("我是Dog的构造方法");
}
public void eat()
{
System.out.println("吃饭");
}
}
class HomeDog extends Dog
{
//类的定义;
public HomeDog(String name, String sex)
{
super(name, sex); //要写在构造方法的第一行
}
public void print()
{
System.out.println(name + "我是一只家狗,汪!");
}
}
class HuskyDog extends Dog//HuskyDog:哈士奇狗
{
//类的定义;
public HuskyDog(String name, String sex)
{
super(name, sex); //要写在构造方法的第一行
}
public void show()
{
System.out.println(name + "我是一只Husky狗,我会作秀。");
}
}
/*
结果:
我是Dog的构造方法
咯咯哒我是一只家狗,汪!
*/
继承的好处:
1、提高代码的复用性
2、提高代码的维护性
3、让类鱼类之间产生关系。是多态的前提
继承的缺点:
增强了类鱼类之间的耦合性
开发原则:高内聚,低耦合
3、子类的实例化过程
在子类实例化操作的时候,首先会让其父类初始化操作。之后子类在自己进行实例化操作。
子类的实例化过程:
子类实例化时会先调用父类的构造方法,如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法
结论:
构造方法只是用于初始化类中的字段以及执行一些初始代码,调用构造方法并不代表生成对象