黑马程序员__java基础视频day7

来源:互联网 发布:1500左右显示器 知乎 编辑:程序博客网 时间:2024/05/10 01:20

---------------------- android培训、java培训、期待与您交流! ----------------------

第七天的视频也是陆陆续续地看完了,看完了第七天的视频对以前的内容又有些疑惑了,翻到以前的笔记看看。觉得这视频肯定是要看第二遍的,第一遍确实看的挺幸苦的,好多东西要记的。而且有时候去逛论坛,发现有很多问题都回答不上来,或者说回答的不完整。第七天的内容主要围绕了继承来讲。

    继承:让类与类之间产生关系,有了这个关系才有了多态的特性。Notice:千万不要为了获取其他类的功能简化代码而继承。必须是类与类之间有所属关系才可以继承。所属的关系是:is a。java语言中是不支持多继承的,java只支持单继承(因为多继承容易带来安全隐患,因为当多个父类中定义了相同的功能,当功能内容不同时,子类对象不确定要运行哪一个)。但是java保留了这一体制,并用另一种体现形式来实现:多实现。
    多层继承:也称为继承体系。c继承b,b又继承a,c中可以用a中的方法。
    如何使用一个继承体系中的功能呢?想要使用体系,先查阅父类的描述,因为父类定义的是该体系中的共性功能,通过了解共性功能就可以知道该体系的基本功能,也就可以基本使用该体系了。在具体调用时,要创建最子类的对象,因为可能父类不能创建对象(抽象类),还因为子类创建对象可以使用更多的功能,包括基本的也包括特有的。
    子父类出现后类成员的特点。1,变量:如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super。super的使用几乎和this一致:this代表本类对象的引用,super代表的是父类对象的引用。
class Fu
{
 int num=4;
}
class Zi
{
 void show()
 {
  System.out.println(num);//此时num前可加this也可加super。this表示本类的引用,super表示父类引用指向本类对象。
 }
}
2.函数:子类中的函数与父类中的函数同名的话,在子类中调用该函数自会调用到子类中的方法,父类中的方法被覆盖了。但是在内存中父类的方法还是存在的,只是不会被用到而已。当子类继承父类,沿袭了父类的功能到子类中,子类中虽具备该功能,但功能与父类不一致,这时没必要定义新功能,而是使用覆盖功能,保留父类的功能定义,并重写功能的内容。覆盖:a。子类覆盖父类,必须权限大于等于父类,才可以覆盖,否则编译不能通过。b,静态只能覆盖静态的。若父类中的将方法定义成私有的,则子类不可以覆盖它,因为子类根本就都不知道该方法的存在。重载和重写:重载:只看同名函数的参数列表。重写:子父类方法要一模一样。若父类中的定义的方法有返回值,而子类中的方法无返回值,则此时不能覆盖,调用此方法虚拟机也不知道该执行谁。
3.子父类中的构造函数:在对子类进行初始化的时候,父类构造函数也会运行,那是因为子类所有的构造函数中默认第一行都有一条隐式的super()语句(访问父类中空参数的构造方法)。super语句一定在构造函数的第一行(先初始化它类再初始化自己)。this()和super()都只能存在第一行,所以两者只能有一。**当然:子类中的构造函数第一行也可以手动指定this语句来执行本类中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数。(父类中的构造函数一定要被执行,不管是有参的还是无参的,至少要实现一个,不然不能编译通过)父类中的构造函数也有super语句,它的父类是object(object是所有类的父类)。
    final:1,final可以修饰类,函数,变量。2,被final修饰的类不可以被继承,final修饰的方法不可以被复写,final修饰的变量只能被赋值一次(即使再次被赋值相同的值也不可以),final可以修饰局部变量也可以修饰全局变量。
作为常量:书写规范:所有的字母都大写,如果是由多个单词组成,单词间通过“_”连接。到现在为止学到的可用于修饰类的有public和final。
当多个类出现相同的功能,但是功能主体不一样时,可以进行向上抽取,这时只抽取功能定义不抽取功能主体。
abstract class student
{
 abstract void study();
}
    抽象:(看不懂)抽象类的特点:
1,抽象方法一定在抽象类中。2,抽象方法和抽象类都必须用abstract关键字修饰。3,抽象类不可以用new创建对象,因为调用抽象方法没意义(抽象方法没有具体的实现)。4,抽象类中的方法要被使用必须被子类复写其所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法则该子类还是一个抽象类。
**没有方法体和空方法体是有区别的。
抽象类和一般类没有多大的不同,该怎样描述事物还是怎样描述事物,只不过该事物出现了一些看不懂的东西,这些不确定的部分,也就是该事物的功能,需要明确出现,但是无法定义主体,通过抽象方法来表示。
抽象类比一般类多了抽象的函数,抽象类不可以被实例化。抽象类中也可以不定义抽象方法,这样做不仅仅是不让该类建立对象。
    模版方法设计模式:定义功能时,功能的一部分是确定的,但是有一部分的功能是确定的,而确定的部分也在使用不确定的部分。把vu确定的方法定义成abstract,确定的方法定义为final。
abstract class GetTime
{
 public final void getTime()
 {
  long start=System.currentTimeMillis();
  runcode();
  long end=System.currentTimeMillis();
  System.out.println(end-start);
 }
 public abstract void run();
}
    接口:初期理解:认为是一个特殊的抽象类(抽象类中所有的方法都是抽象的)。接口中可以定义的格式:常量:public static final;方法:public abstract;接口中的成员都是public的。定义方法可以少写:int NUM;void show();在接口中常变量都有固定的格式,少了哪个系统会自动帮你补上的。
接口是不可以创建对象的,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法去不覆盖后才可以实例化,否则子类还是一个抽象类。
**接口编译之后也变成了class文件。
接口可以被类多实现:class Test implenments Inter,InterA{}。若两个接口中的方法一致,则子类只需覆盖一个就可以了,因为接口中的方法是没有方法体的。
一个类再继承一个类之后,还可以实现多个接口。
接口和接口之间也是继承关系,接口可以实现多继承:interface C extend A,B;
接口的出现降低了设备之间的耦合性。
继承与接口:继承是继承一些基本属性,而实现接口是实现了一种拓展功能。就好像学生都会学习(这是基本功能),而有些学生还吸烟(扩展功能)。
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
原创粉丝点击