java中一个类的直接父类只能有一个,但可以实现多个接口。
1 package javaKeyTechnology; 2 /** 3 * java中单继承,多接口。 4 * 一个类的直接父类只能有一个,但可以同时实现多个接口。 5 */ 6 class Fath{ 7 int age; 8 Fath(int age){ 9 this.age = age; 10 System.out.println("I am Father"); 11 } 12 } 13 14 interface Like{ //接口本身的修饰符可以是public或者默认 15 void like(); //但不管怎样,接口中的方法默认都是public,因此这里不显式的写出来,直接写返回值 16 } 17 18 interface DisLike{ 19 void dislike1(); 20 void dislike2(); 21 } 22 23 public class Son extends Fath implements Like,DisLike{ //必须实现声明的所有接口中的所有方法,否则Son是抽象的,不能实例化对象 24 String name; 25 public Son(String name,int age){ 26 super(age); //父类没有默认构造方法 27 this.name = name; 28 } 29 public void like(){ //但在实现时必须写上public 30 System.out.println("father like smoking"+age); 31 } 32 33 public void dislike1(){ 34 System.out.println("father dislike reading"); 35 } 36 public void dislike2(){ 37 System.out.println("father dislike eating"); 38 } 39 public static void main(String[] args){ 40 Son e = new Son("Yang",45); 41 System.out.println("age:"+e.age+";name:"+e.name); 42 e.like(); 43 e.dislike1(); 44 e.dislike2(); 45 } 46 }
需要注意的点:
1.继承时,由于父类构造器是有参构造器,所以在子类构造函数的首行,必须用super()调用父类构造方法。
但如果父类是无参构造方法(默认的隐式无参和人为定义的显示无参),则不需要super();
如果是父类的非私有成员变量与子类构造函数/其它方法的局部变量同名了,又必须在该局域调用它,则用super.变量名调用该变量,否则可直接调用(同this的用法)
2.定义接口时,接口本身的修饰符是public或默认不写,但接口中声明的方法都是默认public的,变量默认public static void(实际就是常亮)。因此在接口中,这些修饰符都不写
3.但在类中实现接口时,实现接口中的方法时,必须声明public。
4.必须实现该类声明的全部接口的全部方法(一个接口中可以有多个方法),否则该类就是抽象的,如果加上abstract就不能实例化,不加abstract就会报错。
原文地址:https://www.cnblogs.com/leechee9/p/12111271.html
时间: 2024-11-06 17:32:45