JAVA继承语法 子类到底继承了什么?

“继承”是面向对象的第二特征(那什么是特征?什么是第一特征?),体现了类与类之间的“is-a”关系(“is-a”又是什么关系)。当两个类进行继承关联属性时,子类自动具备来自于父类属性行为,做到代码的复用设计的分离。JAVA是一门面向对象的语言。

java继承的机制

类 Object

首先,我们看下面的这个自定义类(Student);

//自定义类Student
public class Student{
//自定义方法 study
    public void study(){
        System.out.println("好好学习,天天向上");
    }
}

在使用的过程中,我们定义一个方法study(学习),除此之外没有定义其他东西,但是在使用时却发现Student对象除了有Study方法外,还有其他一些方法

 这些方法从哪里来的呢?这里提到一个非常重要的类java.lang.Object

JDKDOC文档(在哪里打开?)里很明确的告诉我们:Object 类在整个类的继承体系中是处于绝对顶层的位置,它是所有类的,是祖宗,st对象额外多出来的方法就是来源于它。

所谓的继承就是把共有的数据项和行为抽取到父类中,这样所有的子类都会自动的具备,从而达到复用性。那么,类Object的所有方法都共有性最强的方法。

关键字 extends

我们知道在默认情况下任意一个类都会自动继承Object类,那么,如果我们需要指定一个类继承于某个其它的父类类型,就要用到extends关键字了

public class Superclass{
    public void methodA(){......}
}
public class Subclass extends SuperClass{
    public void methodB(){...}
}

 注意

1.类 SubClass的父类是类SuperClass,而类SuperClass的父类是默认的类Object;所以通过类的继承的传递性,SuperClass具备来自Object的所有数据和行为,SubClass具备来自于SuperClass的所有数据和行为,所以SubClass也具有来自Object的数据和行为;

2.“extends”的英文本意是“扩展”,也就是说子类在父类的基础上是可以有变化性的。这种变化性体现为 :增加子类新的属性和新的行为,或修改继承而来的行为(属性不能修改!)

构造方法:

1.父类的构造方法不会被子类继承!

第一:构造方法语法上要求方法名必须与类名保持一致。所以如果子类继承了父类的构造方法,那么很明显两个语法就冲突了(父类构造方法的名字肯定是父类名,必然和子类名一样!)

第二:构造方法是用来产生对象的。如果子类通过继承拥有了父类的构造方法,那么子类也可以控制父类对象的产生?这也是不对的!(真的不对?)

构造方法不能被重写!

构造方法的作用就是在产生对象的时候,利用内存叠加(什么又叫内存叠加呢?)实现继承机制。

属性

1.父类的属性会被子类继承,无论访问修饰符

在继承机制中已经讲过,产生子类对象会产生父类对象部分,然后叠加子类持有部分,从而构成完整子类对象。所以父类的属性都会放入到父类的对象部分,那么也就在完整子类对象中。

父类的private属性会被继承,但无法访问

private修饰符其本意为:私有。父类如果把该属性定义为了private,即意味着该属性只能让父类自己内部直接访问(举个例子,不是很懂;而子类从语意上就不应该能够访问它(没有得到父类的允许)。

子类可以拥有和父类同名属性,不会发生覆盖。

语法:

关键字:extends;(关键字:一门计算机语言的词汇)

格式:public class 子类名 extends 父类名{}

标识词:package class interface int(数据类型)

修饰词;

-权限:public  private protected("缺省") static final abstract

连接词:extends implements

逻辑 :if else while for do switch case default return break

特殊类型: void 

值: null true false

行为词:new 

继承当中:子类父类之间

1.子类继承了父类什么?所有的

2.子类以及子类对象可以调用到继承的哪些东西?

答:1.继承到自己身上的了(如方法和属性)

        2.调用的最终执行场景一定是实例(对象)来调用(在写的过程 与代码执行时 分开思考)何分开思考?举个例子?

3.属性和方法都可以被继承;{1.实现代码的复用,多个子类共同属性和方法都定义在父类当中,所有的子类都复用这一份代码}

4.访问权限的限制;{

1.访问权限修饰符的作用:规定 类 属性 方法 在项目不同域(就是包)之间的调用权限 举个例子?

域:不同的文件 不同的文件夹 不同的类

类的成员 之间范围(代码块)可以理解为 类的两个大括号之间{    ....}

}

!public--整个项目下的src lib    !private--类  !protected--同一个包下 不同包的子类中{就是同一个包下的都可以都可以继承}

!缺省的不写--同包下!

1.属性变量//不需初始化——创建对象时默认初始化赋值

2.参数变量//不需要初始化,调用方法时必须传入对应类型的数据——调用方法时必须传入对应类型的数据

3.局部变量//必须初始化——没有机会去修改或者重新赋值!

局部变量的关系

继承时:调用时就近原则。

方法重写:

-子类之间大致相同 各自有各自的特点

-子类可以自己类中定义自己这一类的属性和方法(子类之间 行为名一致 但是行为不一致)

在父类中华把行为定义的抽象一些

子类重写父类的方法继续扩展;
语法:

1.子类中重写父类的方法,一般要求除方法体之外 皆与父类一致;

2.最好使用@override//注解 检查重写是否正常!

3.子类以及子类对象会优先调用重写之后方法

4.子类孙子类向上一直继承,方法全部继承上一级父类

优点:1.代码逻辑 差异 结构 可以体验出来  代码复用;

    

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值