继承,方法的重写,super关键字
2018-08-07 本文已影响0人
临木有希
(1)继承是发生在多个类之间
(2)继承使用关键字extends
(3) JAVA只能单继承,允许多层继承
(4)被继承的类叫父类(超类),继承父类的类叫子类(派生类)
(5)在父类中的非私有属性和方法可以被子类继承
(6) protected(受保护的访问权限修饰符),修饰的属性或方法可以被子类继承
(7)构造方法不能被继承
(8)创建对象会调用构造方法,调用构造方法不一定就是创建对象
(9)实例化子类对象,会先调用父类的构造方法,如果父类中没有默认的构造方法,那么 子类必须显示的通过super..来调用父类的带参构造方法,super也只 能在子类构造方法中的第一句
继承的好处:
1、提高代码的复用性
2·提高代码的维护性
3、让类与类之间产生关系,是多态的前提继承的缺点:
增强了类与类之间的耦合性
开发原则:高内聚,低耦合

面试题:overloading和overriding的区别?
overloading:方法的重载,方法名相同,参数列表不同,与返回值无关,发生在同一个类中
overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于或等于父类的访问修饰符,子类的异常声明必须小于或等于父类的异常声明,如果方法被private,static,final修饰,那么不能被重写


/**
继承:从已有的类创造新类的过程
继承一个父类,只能继承非私有的数据(属性和方法)
protected访问权限修饰符,在继承关系中使用,在父类中使用protected修饰的属性和方法可以被子类继承
创建子类对象时,父类的构造方法也会被调用,why?
因为子类要使用父类的数据,那么就要通过父类的构造方法来初始化数据
如果创建子类对象时使用默认构造方法,那么父类的默认构造方法也会被调用
创建子类对象时会调用父类的默认构造方法
当父类中没有无参构造方法时,子类必须显示的调用父类的带参构造方法,使用super()
可以在子类中显示的使用super(...),调用父类的构造方法,只能出现在第一句
面试题:overloading和overriding的区别?
overloading:方法的重载,方法名相同,参数列表不同,与返回值无关,发生在同一个类中
overriding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于或等于父类的访问修饰符,
子类的异常声明必须小于或等于父类的异常声明,如果方法被private,static,final修饰,那么不能被重写
*/
public class Test1{
public static void main(String[]args){
HomeDog homeDog = new HomeDog("旺财");
homeDog.print();
homeDog.eat();
}
}
class Dog{
protected String name;
protected String sex;
public Dog(String name,String sex){
this.name = name;
this.sex = sex;
System.out.println("我是Dog的构造方法");
}
//protected void eat()throws Exception{//抛出一个异常
protected void eat(){
System.out.println("吃饭");
}
}
class HomeDog extends Dog{
public HomeDog(String name){
super(name,"公");//只能在第一句
System.out.println("我是HomeDog的构造方法");
}
public void print(){
//super.属性 表示调用父类的属性,如果是继承过来的属性,则super可以省略
System.out.println(super.name+",我是一只家狗");
}
//重写父类的方法
public void eat(){
super.eat();//调用父类的方法(此处会打印出“吃饭”)
System.out.println("我是家狗,我喜欢吃骨头");
}
}
class HuskyDog extends Dog{
public HuskyDog(String name,String sex){
super(name,"母");
System.out.println("我是HuskyDog的构造方法");
}
public void show(){
System.out.println(name+"我是哈士奇,我能跳舞");
}
}
