面试基础1-重写重载-static-abstract-final-继承(部分非原创,侵删)

1重写和重载

重载:在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。 

重写:两同两小一大

方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限

2 继承

 1.子类继承父类的成员变量

  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  2.子类继承父类的方法

  同样地,子类也并不是完全继承父类的所有方法。

  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

  注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。(后面会讲到)

  3.构造器

  子类是不能够继承父类的构造器,但是要注意的是,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器

3static

在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

4final

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰

父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。

  final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

5abstract

抽象类(abstract class )
     1.只要有个方法是abstract ,那么该类是abstract 类;
     2.abstract 方法在子类中必须有实现;在abstract 类中的abstract 方法只有声明而不能有方法体;
     3.abstract 方法在子类中被实现时要加上override关键字;
     4.abstract 类方法中非abstract 方法在子类中重写时加上new关键字;

接口( interface)
     1.只有方法声明,实现类来实现方法;
     2.成员变量是static和final的;

接口和抽象类(abstract class and interface) 不同点:
     1.继承一个抽象类,继承多个接口
     2.类里面只要有一个抽象方法,该类就是抽象类;
     3.抽象类可以是抽象方法和普通方法,接口中的方法都是声明(只有方法名,没有内部实现),必须被继承者全部实现

凡是继承超类的子类,必须实现(无论是哪种实现方式)超类中定义的抽象方法。

猜你喜欢

转载自blog.csdn.net/yxk2030/article/details/82990945