类的继承
继承使用extend关键字来实现。判断关系“is-a”(是一个)的关系
1、Java只支持单继承:即一个子类只能有一个超类,
2、继承超类的所有属性和方法(私有的属性不能继承)(但不包括构造方法)
3、并且可以为自己增添新的属性和方法。单一个超类可以派生出多个子类。
4、父类中的构造方法时用来创建父类对象的,子类无法继承,也就是说无法通过子类创建父类的对象
super关键字
目的:super关键字能通过super关键字在子类中指明当前的方法或属性时来自父类的。
作用:表示对当前类父类的对象的引用(super表示父类的一个对象)
用法:
调用父类中的普通方法或属性
super.方法名称(参数列表);
super.属性名称;
注意:super只能用在继承关系的子类中。
子类创建对象过程:
在有继承关系的子类中,创建子类对象时一定先=调用=父类的构造方法。因为先创建一个父类对象,在调用自己的构造函数去创建子类对象,因为子类中的属性包含父类中的属性,应使子类属性完全。
如果子类构造方法没有显示调用父类的构造方法,只能调用父类的默认构造方法(在父类中默认构造方法有用);如果父类没有默认的构造方法,而且子类的构造方法又没有调用父类的其它构造方法,那么编译将抱错。
在子类构造方法中调用父类的构造方法,则子类构造方法的第一条语句用关键字super来调用
语法为:
—super();//显示调用父类的无参构造方法
—super(实参列表);//显示调用超类的带参构造方法
访问控制
private:当前类可访问;修饰属性、无法修饰类、方法少见
默认:本类、本包可见(不建议)
protected:对本类、不同包的子类、同一包中的类(特殊的访问修饰符)可以访问protected的属性和方法,类可以修饰(但不建议)
public:在任何位置都可以访问!
类:public、默认的
protected不同包的子类:须继承
注意:当在子类中访问父类用protected修饰的属性时,不能直接通过在其他类中创建的父类对象来对本类中受保护的属性访问,protected是受保护的!原本不同类中是不可以访问的,但是类之间具有继承关系。此时,有两种方式:
1)创建子类对象对该属性访问
2)在子类中指定使用super(创建子类对象时实例化相对应的父类对象)关键字(在父类中)即父类对象的引用去访问该属性
子类继承了父类中除私有的所有属性
方法的重写(override)
多态:同一种事物的多种表现形式。包括:方法的重载和方法的重写!
方法重写只能出现在有继承关系的子类中,子类重写父类中的方法要和父类中的方法名称、参数列表、返回值类型一致,且访问修饰域不能缩小可以扩大!
目的:当父类中的方法无法满足子类的的需求时,扩展方法写入更多的功能,需要对父类的方法重写!
Object类
java.lang.Obiect类是所有Java类的根类
如果没有extends类,则默认为Object类!
查询JDK API中Object类的说明
–toString();回调函数。当输出新创建的对象时,会自动调用该函数,输出类名@对象哈希码的十六进制整数值(建议在自定义类中重写)
–equals(Object obj): 测试某个对象是否与此相等。Object类中是通过判断两个对象变量是否指向同一块内存区域(建议在自定义类中重写)
–hashCode(): 返回该对象的哈希码值,在重写equals()方法时,建议同时重写hashcode()方法,因为判断对象是否相等时会调用这两个方法。
final关键字
1、final修饰(成员变量或局部变量)的值不能改变称为常量,定义时需初始化且值无法更改。
2、可以修饰方法的形参后被称为最终参数,传入方法后,也不能对其修改
3、final修饰的方法不能被子类重写
4、final修饰的类不能被继承
对象的多态性
–向上转型UpCasting/动态绑定
Animal an2=new Dog();
向上转型:通过创建子类对象赋值给父类。父类变量“指向”其子类的对象。自动的
意义:向上转型可以把对象当作是一个父类对象的调用
动态绑定机制也叫延迟绑定,在执行期间会根据当前对象的真正创建者来决定调用哪个类中的方法,谁创建对象就调谁的方法。
动态绑定条件:继承、重写、向上转型、向上转型的对象,调用子类重写的方法;
–向下转型downCasting
父类变量不可以访问子类对象新增加的成员。父类到子类的转换需要强制
可以使用instanceof 关键字来判断对象变量所“指向”的对象是否属于该类
–语法:对象变量名 instanceof 类名(或接口名)【有关系的类】
向下转型是在向上转型的基础上,就相当于在转回去
if(an2 instanceof Dog){//如果向上转型过了然后进行下面的语句。
Dog c=(Dog)an2
}
作用:集合中使用,容器中所有的数据都变成Object。自定义的类对象也是Object类,取出做类型还原,还原其原来的状态。
抽象类
与抽象的区别。
定义:抽象类就是在类中没有足够信息去庙会现实生活中一个具体事务。
1、表征抽象概念的抽象类是不能够被具体实例化的。
2、抽象类中可以有构造方法,概念领域的总体描绘,其下继承的子类在创建时需构造方法来创建父类对象。创建子类的过程既是实例化的过程。
3、抽象类中的静态方法不可以抽象。
注意:含有抽象方法(只有方法的声明没有方法体)的类必须是抽象类。
【访问修饰符】 abstract 返回值类型 方法名称(参数列表);
4、抽象类中的方法必须由子类实现。
5、如果子类不实现父类中所有的抽象方法那么子类也必须定义为抽象类
6、抽象类其实就是一个类,里面声明变量、常量、普通方法、静态变量和静态方法
接口
设计模式
代码编写方式:
1、每个类其对象只能存在一个
实现方式:1)定义一个类,构造方法设置私有,提供一个静态的实例对象,并且设置访问范围为private。提供一个获得该对象的方法静态公有。
2)不用每次都生成对象,只要第一次使用时生成对象即可,对于线程。