java中单继承,多接口的实现及一些注意事项

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-08-29 00:49:25

java中单继承,多接口的实现及一些注意事项的相关文章

关于Java中继承和接口的理解

关于Java中继承和接口的理解 Java语言中,为了实现代码重用,设计了继承这一机制,但是,其设计成单继承,这样设计是有原因的,如下图: Figure1:deadly diamond of death 此图问题称为菱形问题(diamond problem),就是说,当A的子类B和C同时实现了A中的方法,则同时继承了B和C的子类D在调用该方法时会出现混乱,无法得知该调用哪一个方法. 既然不能实现多继承,我们就会考虑把很多方法就写在父类里,或者继承抽象类,实现其方法,但是,这样会导致一个问题,比如说

关于Java中继承多接口同名方法的问题

在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: 1 interface A{ 2 void fun(); 3 } 4 interface B{ 5 void fun(); 6 } 7 interface C extends A,B{ 8 9 } 10 public class Test implements C{ 11 @Override 12 public void fun() { 13 System.out.println("hehe&quo

黑马程序员---java基础-Java类 继承&抽象&接口

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.继承 继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系.当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承.比如下面这段代码: 1 class Person { 2 public Person() { 3 4 } 5 } 6 class Man extends Person { 7 public Man()

Java中类继承、接口实现的一些细节(长期更新)

前言 在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java 程序员应该也比较熟悉.不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作.学习中入手,总结一些细节性的内容,以更进一步 地掌握继承.实现的关系.现在只是写一些目前碰到的内容,以后只要想到了.碰到了任何继承.实现相关问题,都会保持更新此文. 接口A有void C()方法,接口B有int C()方法,则无法同时实现这两个接口 Java为了弥补类单继承的不足,引入了类多实现接口的机制,不过多实

java的继承、接口方面的语法及知识

继承(inheritance):一个类只能继承一个类代码复用继承的语法:class ChildClass extends ParentsClass{ }父类的属性子类中都存在,只是有没有权限访问的问题根据名字找谁是谁?1.变量-> 类型 (类.接口)->接口2.已经确定是变量局部变量.形参->类的属性-> 外部类的属性就近原则构造方法:注意默认的那个无参构造方法 优先调用父类的构造方法如果没有明确指出,java会插入一条调用父类的构造方法(无参的)利用super关键字:1.调用父类

Java自学-继承与接口 Object类

Java中的超类 Object 步骤 1 : Object类是所有类的父类 声明一个类的时候,默认是继承了Object public class Hero extends Object package charactor; import property.Item; public class Hero extends Object { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public v

Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用computer方法完成运算 2.输出运算的结果 (4)设计一个测试类,调用UseCompute中的方法us

面向对象,封装,构造方法,this关键字,main,继承,接口,多态阶段性小结

一.局部变量和成员变量 成员变量:  定义在类中变量 局部变量:  定义在方法中变量 1成员变量与局部变量的区别: 应用范围 成员变量在整个类内都有效 局部变量只在其声明的方法内有效 生命周期   成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失 局部变量: 使用完马上释放空间. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 局部变量存在栈内存中,当不在使用时,马上就会被释放. 初始值 成员变量它存储在堆中,如果没有赋初值,它有默

java面向对象- 抽象类和接口

一.final关键字: 1.final关键字在java中被称为完结器,表示最终的意思 2.final能声明类.方法.属性: 使用final声明的类不能被继承 使用final声明的方法不能被重写 使用fanal声明的变量变成常量,常量不可以被修改.变量变成常量时,一般使用大写,例如:final int AGE = 22; 二.抽象类: 1.包含一个抽象方法的类就是抽象类. 2.声明而未被实现的方法就是抽象方法.必须使用abstract声明. 3.抽象类被子类继承,不能直接对其进行实例化,必须通过其