面向对象:继承
extends :继承
语法:
class Dog extends 被继承的父类 {
}
继承只能继承父类的公共属性,不能继承父类的私有属性,但是可以通过get,set方法给自己设置和修改属性
一个类只能有一个父类,但是可以多层继承,父亲,爷爷,祖先
每个类都要默认的父类,Object所有类的根类
子类在创建实例时会调用父类(多层父类)的构造函数,所以我们在创建子类并给子类写属性时,应该给子类写上
无参数的构造函数和有参数的构造函数,父类也如此,子类
构造函数里使用super(参数)来调用父类的构造函数来赋值
super():是调用父类对应参数的构造函数
super:父类的引用
this:当前类的引用
super()和this()一样都必须写在构造函数得第一行
子类可以继承父类里面的公共方法,子类可以重写父类的方法
注意重写和重载是有区别的 重写是在父子类里面,重载是在同一个类
子类重写了父类的方法后子类创建实例就会以就近原则访问重写后的方法
子类重写父类方法的权限不能缩小,只能保持不变或放大
静态只能重写静态
final 关键字
final 可以修饰变量,被修饰的变量值不能被修改(常量)
public static final 类型 常量名 = 值;
常量名要全部大写
fianl 可以修饰方法被修饰的方法可以被继承但不能被重写
public fianl void getName(){}
fianl 可以修饰类,被修饰的类不能被继承
fianl class 类名{}
抽象类:
什么是抽象?
在生活中有的东西是真实存在的,而有一些是我们想象出来的比如狗,猫,鱼
它们都真实存在,但如果说动物本身呢?所以动物就是我们人抽象出来的一个
概念!
如果说普通类是实例的模版,那么抽象类就是类的模版,打个比方,我们都知道
动物包括了很多真实存在的动物但动物本身只是我们用来将其他动物整合的
一个词,那么动物都有一个共同点,就是吃饭,睡觉那这么多动物我们是不知道
它具体是怎么去实现的所以抽象类的作用就是让不同的普通类继承过去的方法
不相同,也就是多样性!
注意抽象类是不能有实例的就比如说动物它本身也是没有实例的它在代码里面的作用
就是当其他普通类的父类,它可以使用构造函数去给子类调用,它的抽象函数可以实现
不同普通类里面的方法的多样性如在抽象类里面写一个吃饭的抽象函数,那么在所有子类
中也必须写上抽象函数的实现方法,同一个函数名但方式不同!在抽象类里面是可以写普通方法的
只是不能创建实例
看例子:
总结抽象类:
1.抽象方法必须被子类实现后才能被使用
2.普通类不能有抽象方法
3.抽象类不能实例化
4.子类必须全部重写父类中的所有抽象方法
5.抽象类可以有实现好的普通方法
6.抽象类是类的模版,普通类是实例的模版
接口:
当一个抽象类中的方法都是抽象的时候,这时候可以将该抽象类用接口(interface)来代替
格式:
interface{
}
接口就是标准
接口提高了扩展性
接口中的成员修饰符是固定的(只能有这个两种元素)
成员常量: public static final
成员函数: public abstract
接口的出现将多继承 通过另一种形式体现出来即多实现
接口里面只能写常量和抽象方法,但要在被继承接口的类里面去实现,也就是所谓功能的拓展
接口的特点:
接口是对外暴露的规则
接口是程序的功能扩展
接口可以用来多实现
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
类可以同时继承抽象类和接口
接口可以继承多个父,也可以多层继承
创建一个接口
interface Dogeat{
public static int width = 10; //接口里面可以写成员常量
public abstract void eat(); //抽象方法
}
实现(implements)
class Dog implements Dogeat{
public void eat(){ // 实现接口里面的抽象方法
}
}
简单来说:接口就是全局常量和抽象方法的集合
抽象类和接口的区别
抽象类是一个模版
接口是一个标准
区别点:
定义:抽象类就是包含一个抽象方法的类,接口就是全局常量和抽象方法的集合
组成:抽象类是由构造函数,常量,变量,普通方法,抽象方法. 接口是由常量和抽象方法
使用:抽象类是被继承(extends),接口是被实现(implements)的
关系:抽象类可以实现多个接口,接口不能继承抽象类,但可以继承多个接口
常见设计模式:抽象类模版设计,接口是工厂设计,代理设计
对象:都通过对象的多态性产生实例化对象
局限:抽象类有单继承的局限,接口没有此局限
实际:抽象类作为一个模版,接口作为一个标准或表示一种能力
选择:如果抽象类和接口都可以使用,则优先使用接口因为接口避免单继承的局限
特殊:一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类