
java基础笔记008 — 面向对象
今日内容1. 【理解】什么是接口 2. 【掌握】接口的定义格式 3. 【掌握】接口的使用 4. 【理解】接口的成员特点 5. 【理解】类和接口 抽象类和接口之间的关系 6. 【掌握】单继承多实现 7. 【理解】接口之间的多继承 9. 【理解】什么是多态态 10. 【理解】使用多态的前提 11. 【掌握】多态的格式 12. 【理解】多态中的成员访问特点 13. 【理解】多态中的好处和弊端 14. 【理解】多态中的转型 15. 【理解】转型的异常一、接口
- 接口概念
接口就是公共的规范标准,是基抽象类又向上抽取,是方法的集合。集合中主要存放的也是方法(抽象、默认、静态、私有(jdk9)方法)
- 接口定义
public interface 接口名{}
- 接口的使用 implements关键字
//接口中主要是抽象方法,所以同抽象类一样不能new对象,但接口可以被类实现
public class 类名 implements 接口名{}
- 注意
接口的实现类必须实现接口中所有抽象方法,否则实现类该是一个抽象类二、接口成员
- 成员变量
只能是常量,默认修饰符:public static final(可省略)
-
没有构造方法
-
成员方法
- 抽象方法 2. 静态方法 3. 默认方法
public interface Diagarm {
//成员变量
//只能是常量,默认修饰符 public static final
double PI = 3.1415926;
//PI = 1.0;
//1.抽象方法,默认修饰符 public abstract
void a();
void a(int i);
//2.静态方法,可以通过接口名直接调用的方法,有方法体
static void b(){
System.out.println("bbbbbbbbbbb");
}
//3.默认方法,可以通过实现类对象调用的方法,有方法体
default void c(){
System.out.println("cccccccc");
}
}
三、接口特点
- 实现类与接口支持多实现
public class 类 implements 接口1,接口2,..,接口n{}
//接口的多实现中,若出现实现的接口中有相同方法,编辑器会提示实现哪个接口的的方法
- 接口与接口支持多继承
public interface 接口1 extends 接口2,接口3{}
四、多态
- 概念
多态就是不同类的对象在调用同一个方法时呈现出多种不同结果。
- 前提
- 存在继承或实现关系
- 存在方法的重写
- 向上转型(父类引用指向子类对象)
- 格式
//普通继承 父类 引用变量 = new 子类(); //抽象类继承 抽象类 引用变量 = new 抽象子类(); //接口实现 接口 引用变量 = new 实现类();
- 成员(成员变量/方法)的访问
-
成员变量
编译看父类,运行看父类
-
成员方法
编译看父类,运行看子类(子类没重写时,运行还是看父类)
public class A{
int a = 9;
public void aa(){
System.out.println("父类方法");
}
}
public class B extends A{
int a = 3;
//重写方法
public void aa(){
System.out.println("子类方法");
}
}
- 使用多态的好处与弊端
- 好处
1.提高代码的扩展性和可维护性,减少代码冗余 2.定义方法时,将父类型或接口作为参数或返回值类型,在使用时,可使用任意具体子类 *** 作
- 弊端
1.多态中只能使用父类属性以及子类重写父类的方法和父类方法,不能使用子类特有属性和方法
- 多态之转型
- 向上转型
// 多态使用本身就是子类向父类/接口转型,默认的 父类类型 变量 = new 子类类型();
- 向下转型
// 父类类型向子类类型转换,强制的。 子类类型 变量 = (子类类型)父类变量;
向下转型时,只有当父类变量是向上转型创建的,才能使用,且前后子类类型一致,如:
public A{
public void aa(){
System.out.println("父类方法");
}
}
public class B extends A{
public void aa(){
System.out.println("子类重写父类方法");
}
}
public class Test{
public static void main(String[] args){
A a = new A();
B b = (B)a;//报异常ClassCastException
A a1 = new B();//向上转型
B b1 = (B)a1; //向下转型,成功
}
}
- instanceof关键字
//判断变量是否属于某数据类型 变量名 instanceof 数据类型 当数据类型为变量的数据类型或其父类时 返回 true 不属于 返回 false //结合上个例子 A a1 = new B();//向上转型 B b1 = new B(); (a1 instanceof A) true (a1 instanceof B) true (a1 instanceof B) true
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)