这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)
一、 继承
1、概念:新的类可吸收已存在的类中的方法和属性。
2、特点:
1.提高代码的复用性。
2.继承让类与类之间产生了关系,有了这个关系,才有了多态的特性。
3.java支持多层继承,也就是一个继承体系。
3、注意:
1.不要为了获取其他类的功能,简化代码而继承。
2.必须是类与类之间的所属关系才可以继承。
3.java语言中的类,只支持单继承,不支持多继承(多继承容易带来安全隐患)。
因为多继承容易带来安全隐患:当多个父类中定义了相同功能,当功能内容不同时,子类并不确定运行哪一个。
但是java保留了这种机制,并用另一种形式体现:多实现,及一个类可以实现多个接口。
*注:Java继承体系的使用:
如何使用一个继承体系中的功能?
<1>.先查阅体系父类的描述,因为父类中定义的是该体系的共性功能。
<2>.通过了解共同功能,就可以知道该体系的基本功能。
具体调用,要创建最子类,为什么?
<1>因为父类有可能不能创建对象。
<2>创建子类对象可以使用更多的功能,包括基本功能,亦包括特有功能。
4、super关键字(可以this关键字比较学习)
<1>如果子类中出现非私有的同名成员变量时,子类访问本类中的变量,用this;子类要访问父类中的同名变量,用super。
<2>super的使用和this的使用几乎一致。this代表的是本类对象的引用。
<3>super代表的是父类对象的引用。
5、函数覆盖
<1>定义:当子类出现和父类一模一样的函数时,当子类对象调用该函数时,会运行子类的内容如同父类的函数被覆盖一样。
<2>使用情况:当子类继承父类,沿袭了父类的功能,到子类中,子类虽然具备该功能,但是功能的内容却和父类不一致,这时没有必要定义新功能,而是用覆盖特性,保留父类功能定义,并重写功能内容。
<3>注意情况:
1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败!
2.静态方法只能覆盖静态。
<4>重载和覆盖的区别:
重载:只看返回值和参数列表。
覆盖:子类父类方法要一模一样。
6、子类的实例化过程
<1>子类构造函数初始化过程:
子类所在的构造函数,默认都会访问父类中的空参数构造函数,因为子类每一个构造函数内对的第一行都有一句隐式super();当父类中没有空参数的构造函数时,子类必须手动通过super或this语句形式来指定要访问的构造函数。
子类的构造函数第一行也可以手动的指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。
<2>为什么子类一定要访问父类中的构造函数?
因为父类中的数据,子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些对象进行初始化的!所以子类在对象初始化时,要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定定义在子类构造函数的第一行。
<3>练习:
class Fu
{
int num;
Fu()
{
System.out.println("Fu init");
}
}
class Zi extends Fu
{
Zi(int num)
{
//super();
this.num = num;
System.out.println("Zi init");
System.out.println("num = " num);
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi zi = new Zi(8);
}
}
7、final关键字
<1>作用:可以修饰类、函数、变量。
<2>特点:
1.被final修饰的类不可以被继承,是为了防止被继承的类,功能被复写。
2.被final修饰的方法不可以被复写。
3.被final修饰的变量是一个常量,只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。作为常量的书
写规范所有字母都大写,如果有多个字符组成单词间用下划线连接。
4.内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
二、 抽象类
1、抽象类的特点:
<1>抽象方法一定在抽象类中。
<2>抽象方法和抽象类都必须被abstract关键字修饰。
<3>抽象类不能用new创建对象,因为调用抽象方法没有意义。
<4>抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子 类对象调用。
<5>如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
2、抽象类的作用:强迫子类复写抽象类中的函数。
3、与一般类的区别:
抽象类比一般类多了抽象函数,就是再类中可以定义抽象函数;
抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象(用于模板方法设计模式)。
4、模板方法设计模式
<1>什么是模板方法设计模式?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用,不确定的部分,那么就将不确定的部分暴漏出去,由该类的子类去完成。
<2>练习:求一段代码运行的时间。
abstract class GetTime
{
public final void getTime()
{
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("毫秒:" (end-start));
}
public abstract void runcode();
}
class SubTime extends GetTime
{
public void runcode()
{
for(int x=0;x<4000;x )
{
System.out.print(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
SubTime su = new SubTime();
su.getTime();
}
}
三、 接口
1、理解:当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
2、定义方式:用关键词interface定义接口。
3、特点:
<1>接口中常见定义:常量、抽象方法。
<2>接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
<3>接口是不可创建对象的,因为其中有抽象方法。需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。否则子类是一个抽象类。
4、注意:
<1>类实现接口Inter、Test。
<2>一个类可继承一个类,并实现多个接口(多实现)。
<3>一个接口可继承多个接口(但是被继承的接口中不能有重名函数)。
<4>可以实现功能的扩展。