`
kang_sun
  • 浏览: 3149 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

04_类的继承

阅读更多

一:类的继承的语法格式

 

1)关键字:extends

 

2)格式:
      public class 类名 extends 类名 {

      }

 

ps:java中类的继承是单继承,也就是说一个类只允许有一个直接的父类。

 

二:子类能在父类中继承到什么?

 

1)子类能继承到父类中所有的属性和方法。(但是可能不能全部调用)

 

2)java中类的成员方法的四种访问修饰符及子类什么情况下能调用父类中的哪些方法和属性?
     1.public 所有类均可访问到
     2.private 只有同一个类的内部才能够访问到
     3.默认的(friendly) 同一个包下可访问,继承下包外不可访问(java中默认的并没有关键字,friendly是根据c++形象而来)
     4.protected 同一个包下可访问,继承下包外也可访问

 

三:方法重写

 

1)使用方法重写的前提条件

     1.必须要有继承关系

     2.待重写方法的返回值的数据类型,参数个数,参数顺序,参数类型必须完全一致

     3.子类重写父类方法时可以扩大访问修饰符的范围或者不变(但是不能缩小)

 

2)什么情况下使用方法重写:父类与子类使用的方法需要的参数一致,返回值一致,但是方法体不同时

 

3)如何调用被重写之前的父类方法

     super.方法名(参数类型 参数名。。。)

 

四:自动转型

 

1)条件

      必须要有父类与子类的继承关系

 

2)格式

      父类名 对象名 = new 子类名();

 

3)缺陷:无法调用子类新定义的方法

     原因:1.新实例化的对象可以访问到子类的方法,但必须是子类重写了父类之后的方法,并且编译的时候用的是父类的方法,而在运行的时候就是访问的子类重写的方法,一句话:因为多态

                2.该变量不能再访问子类中新定义是属性,因为多态是针对重写的方法,不是覆盖之后的属性。

     ps:更详细的关于多态的理解和讨论请参见http://zhidao.baidu.com/question/176136172.html

 

4)好处:在写英雄的技能的代码时,对每一个不同的英雄都可以用同一个参数来传参,而不必每一个英雄都定义个方法来传参,这样就可以减少代码量等等等。

 

 五:接口

 

1)定义:只用于继承而使用其中的属性和未实现的方法的特殊"类",不能实例化

 

2)关键字:(定义接口的关键字)interface,(实现接口的关键字)implements

 

3)格式:

    1.定义接口:

       public interface 接口名{

       }

    2.继承接口:

       (接口继承接口,一个接口可以有多个父接口)

       public interface 接口名 extends 接口名,接口名...{

       }

       (类继承接口,必须实现接口中全部的方法,如接口有父接口则也必须实现父接口中的方法)

       public class 类名 implements 接口名{

       }

 

六:抽象类

 

1)定义:介于接口和类之间的一种特殊类,不能实例化,能够定义已实现和未实现的方法

 

2)关键字:abstract

 

3)格式:

     

public abstract class 抽象方法名 implements 接口名...{
        //抽象方法定义,必须加关键字abstract,继承的子类必须实现
      public abstract void 方法名();

        //可以定义已经实现的方法
      public void 方法名(){
        }

        //可以实现或者不实现接口中的方法
      public void 方法名(){}
}

 

4)使用方法:当需要频繁用到的接口中有很多未实现的方法时,就可以用抽象类继承,然后全部实现一遍,当我们需要用到哪个方法时只需要继承抽象类然后重写该方法即可,可大大减少代码量

 

ps:抽象类居然可以继承类而不报错,不过事实上继承了什么也干不了,因为里面只允许存在方法,抽象方法和属性,so...

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics