类和类之间的关系
使用extends关键字表达继承关
支持单继承
类和接口之间的关系
使用implements关键字表达实现关系
支持多实现
接口和接口之间的关系,使用extends关键字表达继承关系
支持多继承
类和类之间的关系
使用extends关键字表达继承关
支持单继承
类和接口之间的关系
使用implements关键字表达实现关系
支持多实现
接口和接口之间的关系,使用extends关键字表达继承关系
支持多继承
接口中没有构造方法
如:
金属接口,货币接口,黄金类
java语言只能是单继承
类与类之间不支持多继承的
类与接口之间可以多继承,接口为java中多继承的不足
接口的基本概念
比如USB接口,tpye-c接口
用来连接各个事情的中间件
接口就是一种比抽象类,还抽象的类,体现在所有的方法都是抽象方法
接口是一种比抽像类还抽像的类。所有的方法都是抽像方法
定义类的关键字是class,而定义接口的关键字是interface
私有的方法不能被子类继承
抽象类的应用
银行有定期帐户,与活期账户。继承自账户类
public double getlixi(){}
抽像方法,账户为抽像类
子类继承父类的成员方法
抽象类的实际意义不在于创建对象而在于被继承
多态的概念
抽象类,指向 子类的对象
抽象方法的概念
抽像方法主要指不能具体实现的方法并且使用abstract关键字修饰,也就是没有方法体
具体格式如下:
访问权限 abstract 返回值类型 方法名(形参列表);
抽象方法没有方法体???那用于何处
public abstract void cry();
方法体没有办法写,方法还得存在
抽象类的概念
抽象类主要指不能具体实例化的类并且使用abstract关键字修饰,也就是不能创建对象
抽象类中可以有成员变量与成员方法、构造方法;
抽象类中可以没有抽象方法
拥有抽象方法的类必须是抽象类,因此真正意义上的抽象类,必须有抽象方法
如果一个抽象类中有了抽象方法
抽象类不能new对象,是因为有了抽象方法
抽象方法是没有方法体
编译阶段调父类
运行阶段调用子类
多态的实际意义
多态的意义在于屏蔽了不同子类的差异性实现通用的编程带来不同的效果
同一种事情,不同的形态
Shape s
s即可以表示矩形,又可以表示圆形
多态的最重要的概念
父类类型引用变量,指向子类对象
多态在开发中的实际意义
static关键字修饰,类名.方式更省心
引用数据类型的转换,必须在父子类关系之间
若强转的目标类型并不是该引用真正指向的数据类型时则编译通过,运行阶段发生类型转换异常
为了避免上述错误的发生,应该在强转之前进行判断,格式如下:
if(引用变量 instanceof 数据类型)
判断引用变量指向的对象是否为后面的数据类型
1、引用数据类型之间的转换方式有两种:自动类型转换 和 强制类型转换
自动类型转换主要指小类型向大类型的转换,也就是子类转为父类,也叫做向上转型
强制类型转换主要指大类型几小类型的转换,也就是父类转为子类,也叫做向下转型或显式类型转换
多态的特点:
当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调用父类独有的方法
当父类类型的引用指向子类类型的对象时,父类类型的引用不可以直接调用子类独有的方法
父子类都有的非静态的方法,编译阶段用父类版本,运行阶段调用子类重写的版本(动态绑定)
对于父子类都有的静态方法的调用,编译与运行阶段都是子类
多态 父类类型指向子类的对象
父类类型,指向子类对象,称之为多态
父类类型 引用变量名 = new 子类类型();
如:
Shape sr = new Rect();
sr.show
多态主要指同一种事物表现出来的多种形态
饮料: 可乐、雪碧、红牛、脉动
要想用多态,首先有继承
1.static关键字
概念 、类层级、使用方式、构造块和静态代码块、单例设计模式、饿汉式与懒汉式
2.继承
概念、特点、子类不能继承的、方法的重写、重写的原则、IDEA的使用等
3.访问控制
public private,package、导入等
4.final关键字
概念,修饰类、成员方法、成员变量、常量等
重中之重,单例设计模式
饿汉式与懒汉式
final关键字修饰类体现在该类不能被继承
--主要用于防止滥用继承,如:java.lang.String类等
final关键字修饰成员方法体现在该方法不能被重写但可以被继承
--主要用于防止不经意间造成重写,如:java.text.Dateformat类中format方法
final关键字修饰成员变量体现在该变量必须初始化且不能改变
---主要用于防止不经意间造成改变,如
java.lang.Thread类中MAX_PRIORITY等
常量的概念
在以后的开发中很少单独使用final关键字来修饰成员变量,通常使用public static final关键字共同修饰成员变量来表达常量的含义
常量的命名规范要求是所有字母都要大写,不同的单词之间采用下划线连
public static final double PI = 3.14;
final 本意为“最终的,不可改变的”,可以修饰类,成员方法以及成员变量
final 关键字修饰类体现在该类不能被继承
主要用于防止滥用继承,如
java.lang.String类等
Final修饰方法,不能重写,但是可以继承
常用的访问控制符
public
protected
默认
private 本类中可以访问,其它的都不能访问
public修饰的成员可以在任意位置使用
private修饰的成员只能在本类内部使用
通常情况下,成员方法都使用public关键字修饰,成员变量都使用private
package语句的由来
定义类时需要指定类的名称,但如果仅仅将类名作为类的唯一标识,则不可避免的出现命名冲突的问题
这会给组件复用以及团队间的合作造成很大的麻烦!
在java语言中,用包(Package)的概念来解决命名冲突的问题
包的定义
在定义一个类时,除了定义类的名称一般还要指定一个包名,格式如下
package 包名
package 包名1.包名2..包名n;
包名有一定的命名规则
包的导入
import 关键字的导入包
使用jmport关键字导入静态成员,从Java5.0开始支持
又见构造块与静态代码块
大括号的内容都是构造块
静态代码块 在前面加上了static的关键字
父类的构造方法先与子类的构造方法
先执行父类的静态代码块,再执行子类的静态代码块
执行父类构造块,执行父类的构造方法
执行子类的构造块,执行子类的构造方法
方法的修饰词,返回值类型,方法名,参数列表完全相同
要求方法名相同、参数列表相同以及返回值类型相同,从java5开始允许返回子类类型
要求方法的访问权限不能变小,只能是相同或是变大
public 是最大的访问权限
要求方法不能抛出异常
从父类中继承下来的方法不满足子类的需求时,就需要在子类中重新写一个和父类一样的方法来覆盖从父类中继承下来的版本,该方式就叫做方法的重写 Override
方法重载与方法重写的区别
方法重载:方法名相同,参数列表不同
方法重写:子类中与父类名称一样的方法