------- android培训、java培训、期待与您交流!----------
1 继承
提高了代码的复用性
让类与类之间产生了关系,有了这个关系,才有了多态的特性
注意:千万不要为了获取其他类的功能,简化代码而继承.
必须是类与类之间有所属关系才可以继承 所属关系: is a
java只支持单继承不支持多继承:当父类中定义了相同的功能时,当功能内容不同时子类不知道运行那个功能
例子:java不支持多继承,如果有多个父类,然后父类有一样的函数的时候,子类不知道要运行那个功能
class A
{
void show()
{
System.out.print(a);
}
}
class B
{
void show()
{
System.out.print(a);
}
}
class C extends A,B //这个是错误的子类不知道运行那个功能
{
void show()
{
System.out.print(a);
}
}
要创建最子类的对象
查阅父类功能,创建子类对象使用功能
聚集:聚合和组合 has a
聚合:一个球队有球员 组合:手是身体的组成部分(紧密联系程度高)
2 变量
如果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this
子类要访问父类中的同名变量,用super
super的使用和this的使用几乎一致
this是代表本类对象的引用
super是代表父类对象的引用
3 子父类中的函数
当子类和父类出现了同名函数的时候,会运行子类的函数,这种情况叫覆盖或者重写
4 覆盖
必须保证子类权限大于或等于父类权限
静态只能覆盖静态
5 记住大家:
重载:只看同名函数的参数列表
重写:子父类方法要一模一样
class Fu
{
void speak()//如果是public void speak而子类中的方法不是public,继 承不了,程序会错误必须保证子类权限大于或等于父类权限
//如果是private void speak,程序不会出错,但是不会覆盖,因为子类都访问不到父类
{
System.out.print(vb);
}
void show()
{
System.out.print(name);
}
}
class Zi extends Fu
{
void speak()
{
System.out.print(java);//这行是覆盖了父类的speak方法
}
}
6 子类的实例化过程
结论:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数
为什么子类总会访问父类中的空参数函数呢?
因为子类继承父类的时候,父类的数据子类可以直接获取,必定要看看父类是怎样初始化这些数据的,所以要先访问一下父类中的构造函数
注意:super语句一定定义在子类构造函数的第一行
7经验:
在本类中构造函数调用另一个构造函数公式为:this(...);
子类要调用父类构造函数公式:super(...);
8 final:最终 作为一个修饰符
1可以修饰类,函数,变量
2被final修饰的类不可以被继承
3被final修饰的方法不可以被复写,没有被final修饰的方法可以被复写
4被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量又可以修饰局部变量 常量书写格式:所有字母都大写,多单词组成用_连接
5内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量
9 当多个类出现相同功能,但是功能主题不同,这是可以进行向上抽取,这时只抽取功能定义,而不抽取功能主题
抽象类的特点:
1,抽象方法一定在抽象类中
2,抽象方法和抽象类都必须被abstract关键字修饰
3, 抽象类不可以用new创建对象,因为调用抽象方法没意义
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象使用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类.
为什么会有抽象类?
因为有一些函数功能是相同的,但是功能主体不同,在父类中就不要写功能主体,定义成抽象类,让子类去复写他
抽象类比一般类多了一个抽象函数,就是在类中可以定义抽象方法.
抽象类不可以创建对象
abstract class student //前面有abtract表示这是一个抽象类,不可以创建对象
{
abstract void study();//这是一个抽象方法,子类要复写它
void sleep()
{
System.out.print("睡觉");//这不是一个抽象方法,子类不需要复写它
}
}
class baseStudent extendsstudent
{
void study()
{
System.out.print("我学习的是基础");
}
}
10 例子
开发的时候要把公司的员工建模,员工有三个属性,姓名工资和工号,另外经理还具备奖金属性,请使用继承的思想,设计出员工类和经理类,要求类中提供必要的方法进行属性访问
abstract class employee
{
private String name;
private double pay;
private double id;
employee(String name,double pay,double,id)
{
this.name=name;
this.pay=pay;
this.id=id;
}
public void work();
}
class pro extends employee
{
pro(String name,double pay,double,id);
{
super(String name,double pay,double,id)
}
public void work()
{
System.out.print("work");
}
}
class manager extendsemployee
{
private double bonus;
manager(String name,double pay,double,id,double bonus)
{
super(String name,double pay,double,id);
this.bonus=bonus;
}
public void work()
{
System.out.print("manager");
}
}
11 子类只需要复写抽象类中的抽象方法,不是抽象类的方法不用复写,如果不想子类复写父类的方法可在前面加final
12 接口:interface
当抽象类中的方法都是抽象的时候,这个类叫做接口类可以用interface 来定义
子类实现interface用implements关键词
inerface类:变量和函数都是public
变量默认是public static final
函数默认是pulic abstract
13 接口与接口之间可以继承,但是不可以实现,因为实现是要方法体的,接口与类之间是实现,不是继承,因为类继承接口,类就变成了抽象函数,类可以实现多个接口,但不能继承多个类,因为接口是没有方法体的,而类是有方法体的,如果类可以继承多个类如果父类的方法是一样的会造成方法冲突
------- android培训、java培训、期待与您交流!----------