在面向对象编程中,很多对象具有一些共同特征,我们把这些对象的共同特征提取出来新建一个父类,子类继承父类非私有的属性和方法,从而我们在定义多个不同对象时避免大量重复代码的书写。在使用继承前我们要明确继承的定义和作用?我们为什么需要继承?以及怎么去实现继承,继承的好处是什么?
①继承是类之间满足is-a的关系,反映出一个类(子类)是另一个类(父类)的特例
②多个对象之间具有一些相同的属性和方法,满足is-a的关系,我们可以将对象之间的相同属性和方法提取出来重新构造个类(父类),通过继承可以得到父类中的非私有属性和方法并通过实例的方法扩展来定义子类的特有的属性和行为(父类中不具有的属性和方法)。由此避免了在创建大量具有相同特征的对象时出现大量代码冗余。
③继承的关键字是:extends
2.Java中是否支持多继承?
Java语言是单继承多实现(继承一个直接父类,实现多个接口)。
3.子类是否可以继承父类的构造方法?
子类不可以继承父类的构造方法,如果父类中有显示的构造方法,子类要调用父类中的构造方法。(使用super () 调用父类中的显示构造方法)
4.子类是否可以直接访问父类的私有属性?
子类不可以直接访问父类中的私有属性,子类继承的是父类中非私有的属性和方法,子类可以通过父类公开的方法访问父类的私有属性。
5.子类如何直接访问父类的公共属性?
Super.属性的方式
6.子类如何调用父类的实例方法?
子类通过实例方法重写父类方法的方式调用父类中的实例方法
7.重写的特征是什么?
①方法名相同,方法返回值类型相同,参数列表相同,不在同一个类中
②一般情况下方法重写,方法体不同
③子类重写父类的时候只能提升父类方法的访问权限,不能缩小
8.造方法是否可以重写?
构造方法不可以重写,只能调用,通过super( )的方式调用父类中的构造方法
9.构造方法是否可以重载?
构造方法可以重载,构造方法的重载可以实现不同对象的定义
10.所有的java类都继承哪一个父类?
Java中所有类都继承object类
例子:定义一个Animals(动物的父类),具有name属性,eat(吃)和sleep(睡觉)的方法,定义老虎Tiger和兔子Rabbit 两个子类,老虎和兔子具备相同的睡觉行为特征“输出:在睡觉。。。。。。。”,
老虎的吃的行为是“吃肉”,兔子吃的行为是“吃草”
/**
* 动物类(父类)
* @author Administrator
*
*/
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
/*method*/
public void eat(){
}
public void sleep(){
System.out.println(name+"正在睡觉....");
}
public String getName() {
return name;
}
/*构造方法*/
public void setName(String name) {
this.name = name;
}
}
/**
* 老虎类(子类)
* @author Administrator
*
*/
public class Tiger extends Animal {
public Tiger(String name) {
super(name);
}
/*方法重写*/
public void eat() {
System.out.println(getName()+"吃肉");
}
}
/**
* 兔子类(子类)
* @author Administrator
*
*/
public class Rabbit extends Animal {
public Rabbit(String name) {
super(name);
}
@Override
public void eat() {
System.out.println(getName()+"吃草");
}
}
public class TestAnimal {
/**
* 测试类
*/
public static void main(String[] args) {
Rabbit kitty=new Rabbit("Kitty");
kitty.eat();
kitty.sleep();
Tiger xinba=new Tiger("辛巴");
xinba.eat();
xinba.sleep();
}
}