黑马程序员 一步一步往上爬 学习毕老师java视频的第07天

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

毕向东 Java基础视频教程07天01面向对象(继承-概述)             

1.  类与类之间有所属关系才可以继承,不能为了获取其他类的功能简化代码而不顾所属关系就继承。Extends  子继承父

2.  继承提高了代码的复用性,并让类与类之间产生的关系

 

 

问题 :有public的方法和咩有public也咩有private的方法在权限上有什么区别

 

 

 

毕向东 Java基础视频教程07天02面向对象(继承-概述2)         

1.   不严谨的说java只支持单继承,不支持多继承,因为多继承容易产生安全隐患,当多个父类中含有相同的功能,但功能的内容不同时,子类在调用该功能的时候不确定执行哪一个功能。C++支持多继承,java改良这种机制为多实现。

2.   Java支持多层继承,继承体系

3.   如何使用一个继承体系中的功能:

查阅父类功能了解继承体系的共性功能,创建子类对象使用所有功能。

4.   一个孩子只能有一个父亲,但是一个孩子就可以有爷爷

 

 

 

毕向东 Java基础视频教程07天03面向对象(聚集关系)

1.  聚集:聚合+组合  关系紧密程度的不同

 

 

 

毕向东 Java基础视频教程07天04面向对象(子父类中变量的特点)       

2.子类和父类有同名变量或者同名功能时,子类创建的对象在调用该变量或者方法时应用的是子类的。

3,this代表的是本类对象的引用,super代表的是父类对象的引用

5.  加载zi.class文件时会先加载fu.class文件

6.  当一个类继承了另一个类时,就要把这两个类当做一个整体去看待,当用子类去创建一个对象时,不单单是用子类的东西创建的还必须包括父类的东西。在看子类的时候就要自动的把父类的东西加入其中。

7.  在继承父类的子类中,当子类和父类都有属性number时,子类里的方法 void show()里的number默认为根据子类创建的对象里的子类的number,即this.number ,当没有本类里没有number时自动跳转到父类的number,super.number表示对象里的父类的number。当只有number时默认为是对象里本类的number,如果没有的话才是父类里的number.对象里子类和父类是互相跳转的。

8.  this和super在方法区

 

 

 

毕向东 Java基础视频教程07天05面向对象(子父类中函数的特点)

1.  函数的新特性:覆盖/重写

2.  当子类和父类中出现同名函数时,用子类对象调用该函数时,运行的是子类函数,称之为函数覆盖。也可以说是子类沿袭父类功能,定义子类特有内容。

3.  修改源码是灾难,所以在编写源码的时候就要设计好,提高程序的扩展性,方便日后升级。

4.  当子类和父类都有show()时,在子类里写show(),默认是this.show(),也即对象里本类的show(),

5.  覆盖升级实例:

Class Tel

{

Void show()

{

 System.out.println(“number”);

}

}

Class NewTel extends Tel

{

Void show()

{

 Super.show();  当想调用父类show()时,super.show()

 System.out.println(“name”);

 System.out.println(“pic”);

 

}

}

6.  子类函数覆盖父类函数,子类的权限必须大于等于父类,否则编译失败。但是注意父类权限为private时是无法覆盖的,因为子类压根不知道父类中有什么东西。也就是说继承的时候private的东西会继承,但是覆盖时因为被封装了,所以无法覆盖。

7.  静态只能覆盖静态,因为静态先加载,非静态后加载。子类覆盖父类时,子父类函数的返回值类型一般要求一样。

8.  Super.show()既可以表示父类的show(),也可以表示对象里父类的show(),简单理解为父类中show().

9.  当在函数中看到this时首先看有没有继承关系,没有this就是调用的对象,有就理解为本类(当然要知道是对象里的本类)

10.           当子类和父类中都有变量number,无论是在子类的方法里出现number,还是在主函数里子类的对象调用number,默认都是子类的number,木有时才会寻找父类。

11.           同名函数不允许出现返回值类型不同,因为同名函数不管是重载还是重写,都要求返回值类型一样。所以出现同名函数时就要自觉判断是重载还是重写。

12.           重载方便对函数功能的识别。

13.           子类和父类中出现同名函数时要么重载,要么重写,如果不是就会出现编译问题。如果是重写的话,因为子类函数对父类函数进行了覆盖,在用对象调用改名函数时会运行子类函数。如果是重载的话就不存在调用哪个的纠结。

 

 

 

 

毕向东 Java基础视频教程07天06面向对象(子父类中构造函数的特点-子类实例化过程)

1.  this()本类中空参数构造函数super()父类中空参数构造函数

2.  创建子类对象在在类构造函数中进行初始化的时候,当子类构造函数没有调用父类构造函数初始化时,系统会默认在子类构造函数的第一行有一条隐式语句,super(),也即运行空参数的父类构造函数。若是已经自己设置了调用父类构造函数初始化就不会有这个默认了。也就是说只要子类构造函数中调用父类构造函数初始化就行了。简单说:创建对象进行初始化时会先在父类空参数构造函数中进行初始化,但是如果父类没有空参数构造函数就会出现编译失败。

3.  默认初始化,显示初始化,构造代码块初始化,构造函数初始化,其中如果构造代码块和构造函数中没有内容,依然保持之前的初始化内容,不会再初始化为0null等。

4.  默认空参数构造函数是在没有自己建立构造函数的情况下才自动加上的,自己已经建立了构造函数不管是不是空参数的,都不会再有默认空参数构造函数了。

5.  调用父类中的构造函数和普通函数的方法不一样

调用父类总普通函数:super.show()

调用父类中的构造函数:super() super(3)

6.记住默认的东西,都是因为你自己没有做,才给你加上了,你自己要是做了同类的事情默认就不存在了。1151

7.子类构造函数初始化时为什么要先访问父类进行初始化:

因为我们在对对象进行初始化时,肯定要对对象里父类的属性比如number进行初始化,既然这个number是父类的属性,你对它进行初始化肯定要先考虑父类是怎么对他初始化的,不然父类肯定不高兴啦。父类说:这个number是子类继承我的,你对它初始化时不考虑我是怎么对她初始化,却只考虑子类对他怎么初始化,凭什么啊?

9.  传递的是字符串时字符串必须""

10.           关于this,super,变量的辨认

super好辨认就是父类的意思,而this.name 和name和this()一切都先默认为是对象的,当出现字符类中都有时,就当作本类。就要先看name,那么this就是本类的意思,如果只有一个类中定义了name那么this就是对象的意思。同样对于name,如果字符类中都定义了name,那么name默认就是本类的name,如果只有一个类有name,那么name就是对象的name。this()就是本类空参数构造函数。

11.当父子类中只有父类中有变量name时,在子类中想把值传给父类name时,既可以用super.name=  也可以用this.name= 因为,字符类中就一个name,this就是对象,你传给对象的name和传给父类的name没有区别。

12.子类构造函数第一行要么是super要么是this,有了其中一个就不会再有另一个,因为有了this(),就会访问另个子类构造函数,在另一个子类构造函数中会默认访问父类构造函数,这样已经达到了访问父类构造函数的目的。所以就不能再有super了。

13.子类中至少会有一个构造函数访问父类中的构造函数。

14.父类构造函数中的第一行默认也有一个super()也即父类构造函数,而父类的父类,也是所有构造函数的父类就是Object.

 

 

 

毕向东 Java基础视频教程07天07面向对象(final关键字)

1.  被final修饰的类不可以被继承。

2.  为了确保类中的函数不被另一个类复写,就把该类定义为最终类,这样该类就不能被其他类继承了。

3.  被final修饰的类不可以被继承,被final修饰的方法不可以被复写。如父类中有

Final Void show();前面有final就说明该方法不能被复写,可是你偏要在子类中也写个void show(),这时就会编译出错。

4.  被final修饰的变量是常量只能赋值一次,可以修饰成员变量和局部变量。所有常量都用大写字母,当多个单词组成时,中间用下划线连接。

 

 

毕向东 Java基础视频教程07天08面向对象(抽象类)

1.  当多个类中出现相同功能定义,但是功能主体不同时,可以对功能定义进行抽取,不抽取功能主体,抽完之后用;结束,如

Void show();

对没有内容体的方法(注意不是内容为空,而是根本就看不见内容体)进行abstract 如abstract void show();

2.  抽象方法一定在抽象类中,抽象类不可以new对象,abstract即看不懂,一个看不懂的类创建对象有意义,并且假设你创建了对象去调用里面的方法时,一个看不懂的方法调用它有意义吗

3.  如果要使用抽象功能,必须对父类里的所有抽象方法进行复写,才能建立子类对象调用该功能,如果只复写部分抽象方法,子类还是抽象类。

4.  Abstract:看不懂,不知道

 

 

 

 

毕向东 Java基础视频教程07天09面向对象(抽象类2)

1.  抽象类和抽象方法作用:强迫子类去做一些事情,

如父类中有一个抽象方法abstract void study();

子类继承之后,子类肯定想穿件对象啊,但是由于继承了抽象方法,所以必须先把抽象方法都复写,这样就达到了让子类做事的目的。

2.  抽象类和一般类没有太大不同,该怎么描述事物就怎么描述事物,该事物中有一些看不懂的东西。

3.  抽象类不可以实例化。

4.  抽象类也可以不建立一个抽象方法,这样做仅仅是为了不让该类建立对象。

 

 

 

 

毕向东 Java基础视频教程07天10面向对象(抽象类练习)

1.  通过构造函数对类的属性初始化,就是对即将创建的对象的属性初始化。

 

 

毕向东 Java基础视频教程07天11面向对象(模板方法模式)

1,  模板方法模式:

在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分,那么就将不确定的部分暴露出去,由该类的子类去具体完成。

2.  System.currentTimeMillis()返回的是当前时间于协调世界时1970年1月1日午夜之间的时间差,以毫秒为单位。1s=1000Millis

 

 

 

毕向东 Java基础视频教程07天12面向对象(接口)

1.  接口常量:public static final(全局常量)

2.  接口方法:public abstract

3.  接口:常量+全部都是静态方法

4.  初步认识的接口:特殊的抽象类,类中的方法全为抽象,变量是常量,就定义interface

5.继承表示可以拿来直接用,而用实现,就表示必须先实现,也就是覆盖才能用这些功能。

 

 

毕向东 Java基础视频教程07天13面向对象(接口)

1.  java不支持多继承,但是支持多实现。

2.  不支持多继承原因:多个父类中的方法重复,调用时不知调用哪个。而支持多实现是因为,多继承中,同名方法方法体不同,调用时不知调用哪个方法体,而多实现中都没有方法体,你调用哪个都一样,不存在了多继承中的问题。

3.  在多实现中,已覆盖就可能把几个同名的方法都覆盖了。

4.  一个类可以在继承一个类的同时实现多个接口

5.  类继承类,接口继承接口,类实现接口,实际上就等于类继承接口。

6.  当一个类实现多个接口时,多个接口里含有同名函数show()时,返回值类型必须相同。因为再创建该类对象对show调用时,因为对多个不同返回值类型的show()函数都进行了复写,那么类中就有多个复写的新show()存在,但是返回值类型不同,对象调用时就不知道调用哪个了。

7.  Java的类中不存在多继承,但是接口与接口之间存在多继承

如:

Interface A

{}

Interface B

{}

Interface C extends A,B

{}

 

 

 

毕向东 Java基础视频教程07天14面向对象(接口的特点)

1.  接口特点:

对外提供的规则

实现了程序的功能扩展

降低了耦合性

2.  继承和实现区别:继承表明你是其中的一种,而实现是一种功能的扩展。

3.  接口实现了功能扩展,但具体功能怎么扩展由类去实现。

4.  一般基本功能定义在类中,扩展空能定义在接口中。

5.  接口名一般反应功能。

 

 

 

毕向东 Java基础视频教程07天15面向对象(多态-概念)

1,  多态性:对象存在的多种形态,有利于程序的扩展性。既可以把对象当做它本身的类型来使用,也可以把它当做基类型来使用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值