day09-10
来源:互联网 发布:一键海淘 知乎 编辑:程序博客网 时间:2024/05/18 00:08
多态(动态绑定机制)
多态的概述
事物存在的多种形态
多态前提 继承 重写 引用
* a:要有继承关系。
* b:要有方法重写。
* c:要有父类引用指向子类对象。
多态的成员访问特点(代码体现) 方子
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
多态的好处和弊端
弊端:
父类(接口)引用不能使用子类特有功能。
为了解决这个弊端,我们需要向下转型
好处:
可以提高代码的扩展性(多态)和可维护性(继承)。
向上转型和向下转型 先上后下
Person p = new SuperMan();向上转型
SuperMan sm = (SuperMan)p;向下转型
//基本数据类型提升
int i=10;
byte b=20;
//自动提升 i=b;
//强制提升 b=(byte)i;
抽象类
抽象类的概述 abstract
看不懂的
抽象类特点
* a:抽象类和抽象方法必须用abstract关键字修饰
* abstract class 类名 {}
* public abstract void eat();
* b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
* c:抽象类不能实例化那么,抽象类如何实例化呢?
* 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
* d:抽象类的子类
* 要么是抽象类
* 要么重写抽象类中的所有抽象方法
抽象类的成员特点
* a:成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
* b:构造方法:有。
* 用于子类访问父类数据的初始化。
* c:成员方法:既可以是抽象的,也可以是非抽象的。
a:抽象方法 强制要求子类做的事情。
* b:非抽象方法 子类继承的事情,提高代码复用性。
abstract不能和final private static关键字共存
抽象类的案例
接口
接口的概述
从狭义的角度讲就是指java中的interface
从广义的角度讲对外提供规则的都是接口
接口特点
* a:接口用关键字interface表示
* interface 接口名 {}
* b:类实现接口用implements表示
* class 类名 implements 接口名 {}
* c:接口不能实例化
* 那么,接口如何实例化呢?
* 按照多态的方式来实例化。
* d:接口的子类
* a:可以是抽象类。但是意义不大。
* b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口的成员特点
成员变量;只能是常量,并且是静态的并公共的。
* 默认修饰符:public static final三个关键字可以互相交换位置
* 建议:自己手动给出。
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
* 默认修饰符:public abstract
* 建议:自己手动给出。
类与类,类与接口,接口与接口的关系
* a:类与类:
* 继承关系,只能单继承,可以多层继承。
* b:类与接口:
* 实现关系,可以单实现,也可以多实现。
* 并且还可以在继承一个类的同时实现多个接口。
* c:接口与接口:
* 继承关系,可以单继承,也可以多继承。
抽象类与接口的区别
A:成员区别
* 抽象类:
* 成员变量:可以变量,也可以常量
* 构造方法:有
* 成员方法:可以抽象,也可以非抽象
* 接口:
* 成员变量:只可以常量
* 成员方法:只可以抽象
* B:关系区别
* 类与类
* 继承,单继承 多层继承。
* 类与接口
* 实现,单实现,多实现
* 接口与接口
* 继承,单继承,多继承
接口的案例
包的概述: 就是文件夹
作用: 分类管理java源文件
包的分类:
单级包 cn
多级包 cn.itcast
包的划分原则: CRUD 增删改查 按照功能和模块进行划分
一般情况下是先按照模块进行划分,然后按照功能进行划分
需要使用package 对某一个java文件进行加包
包的注意事项:
a: package只能是一个java源文件的第一条可执行语句
b: 一个java源文件只能使用一个包
c: 如果没有没有定义包,那么使用的就是默认包
面试题:
package , import ,class的顺序是什么?
import在package和class的中间
import
其实就是让有包的类对调用者可见,不用写全类名了
四种权限修饰符
本类 同一个包下(子类和无关类)不同包下(子类) 不同包下(无关类)
private Y
默认 YY
protected Y Y Y
public Y Y YY
内部类
* 概述: 就是把一个类定义在另一个类中,那么这个类就被称之为内部类
举例: 把A类定义在B类中,那么这个A类就被称之为内部类
* 特点:
** 内部类可以直接的访问外部类的成员包含私有的
** 外部类要想访问内部类的成员必须创建对
内部类分类:(位置划分)
局部内部类 方法中
成员内部类 类中方法外
//测试类中直接调用成员内部类 Outer.Inner oi=new Outer().new Inner();
//测试类中直接调用静态内部类 Outer.Inner oi=new Outer.Inner();可以调用里面的一切静态,非静态成员
成员内部类常见修饰符及应用
private:只能在本类中访问
作用:保证数据安全性
static:静态内部类中可以存在内部类方法和非静态方法
静态内部类只能访问外部类的静态成员
作用:简化创建对象,方便外部访问
局部内部类访问局部变量
//调用局部内部类必须在方法中建立局部内部类对象调用
局部变量必须是最终的,用final修饰//jdk1.8不需要
why? 生命周期
局部变量的生命周期随着方法的建立二建立,随着方法的消失而消失
对象存储在堆内存,其生命周期随着对象的建立而产生,随着垃圾回收器的回收而消失
极有可能出现一种情况,方法以及消失了(包括局部变量)而对象还没被垃圾回收器回收
就不能使用局部变量了
加上final修饰后局部变量变为常量,纳入方法区的常量池,常量池的生命周期
随着方法的建立二建立,随着方法的消失而消失
匿名内部类:局部内部类的简化
前提:需要一个类或者接口
格式;new 类名/接口名(){方法重写}; new Jump(){public void jump(){System.out.println("跳高")}};
本质: 就是继承一个类或者实现接口的子类对象
匿名内部类中this关键字:
this表示的是匿名内部类的对象
public interface Inter {
public static final int a = 23 ;
}
public class Test {
public static void main(String[] args) {
new Inter() {
public void show() {
System.out.println(this.a);
}
}.show();
}
}
多态的概述
事物存在的多种形态
多态前提 继承 重写 引用
* a:要有继承关系。
* b:要有方法重写。
* c:要有父类引用指向子类对象。
多态的成员访问特点(代码体现) 方子
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
多态的好处和弊端
弊端:
父类(接口)引用不能使用子类特有功能。
为了解决这个弊端,我们需要向下转型
好处:
可以提高代码的扩展性(多态)和可维护性(继承)。
向上转型和向下转型 先上后下
Person p = new SuperMan();向上转型
SuperMan sm = (SuperMan)p;向下转型
//基本数据类型提升
int i=10;
byte b=20;
//自动提升 i=b;
//强制提升 b=(byte)i;
抽象类
抽象类的概述 abstract
看不懂的
抽象类特点
* a:抽象类和抽象方法必须用abstract关键字修饰
* abstract class 类名 {}
* public abstract void eat();
* b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
* c:抽象类不能实例化那么,抽象类如何实例化呢?
* 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
* d:抽象类的子类
* 要么是抽象类
* 要么重写抽象类中的所有抽象方法
抽象类的成员特点
* a:成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
* b:构造方法:有。
* 用于子类访问父类数据的初始化。
* c:成员方法:既可以是抽象的,也可以是非抽象的。
a:抽象方法 强制要求子类做的事情。
* b:非抽象方法 子类继承的事情,提高代码复用性。
abstract不能和final private static关键字共存
抽象类的案例
接口
接口的概述
从狭义的角度讲就是指java中的interface
从广义的角度讲对外提供规则的都是接口
接口特点
* a:接口用关键字interface表示
* interface 接口名 {}
* b:类实现接口用implements表示
* class 类名 implements 接口名 {}
* c:接口不能实例化
* 那么,接口如何实例化呢?
* 按照多态的方式来实例化。
* d:接口的子类
* a:可以是抽象类。但是意义不大。
* b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口的成员特点
成员变量;只能是常量,并且是静态的并公共的。
* 默认修饰符:public static final三个关键字可以互相交换位置
* 建议:自己手动给出。
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
* 默认修饰符:public abstract
* 建议:自己手动给出。
类与类,类与接口,接口与接口的关系
* a:类与类:
* 继承关系,只能单继承,可以多层继承。
* b:类与接口:
* 实现关系,可以单实现,也可以多实现。
* 并且还可以在继承一个类的同时实现多个接口。
* c:接口与接口:
* 继承关系,可以单继承,也可以多继承。
抽象类与接口的区别
A:成员区别
* 抽象类:
* 成员变量:可以变量,也可以常量
* 构造方法:有
* 成员方法:可以抽象,也可以非抽象
* 接口:
* 成员变量:只可以常量
* 成员方法:只可以抽象
* B:关系区别
* 类与类
* 继承,单继承 多层继承。
* 类与接口
* 实现,单实现,多实现
* 接口与接口
* 继承,单继承,多继承
接口的案例
包的概述: 就是文件夹
作用: 分类管理java源文件
包的分类:
单级包 cn
多级包 cn.itcast
包的划分原则: CRUD 增删改查 按照功能和模块进行划分
一般情况下是先按照模块进行划分,然后按照功能进行划分
需要使用package 对某一个java文件进行加包
包的注意事项:
a: package只能是一个java源文件的第一条可执行语句
b: 一个java源文件只能使用一个包
c: 如果没有没有定义包,那么使用的就是默认包
面试题:
package , import ,class的顺序是什么?
import在package和class的中间
import
其实就是让有包的类对调用者可见,不用写全类名了
四种权限修饰符
本类 同一个包下(子类和无关类)不同包下(子类) 不同包下(无关类)
private Y
默认 YY
protected Y Y Y
public Y Y YY
内部类
* 概述: 就是把一个类定义在另一个类中,那么这个类就被称之为内部类
举例: 把A类定义在B类中,那么这个A类就被称之为内部类
* 特点:
** 内部类可以直接的访问外部类的成员包含私有的
** 外部类要想访问内部类的成员必须创建对
内部类分类:(位置划分)
局部内部类 方法中
成员内部类 类中方法外
//测试类中直接调用成员内部类 Outer.Inner oi=new Outer().new Inner();
//测试类中直接调用静态内部类 Outer.Inner oi=new Outer.Inner();可以调用里面的一切静态,非静态成员
成员内部类常见修饰符及应用
private:只能在本类中访问
作用:保证数据安全性
static:静态内部类中可以存在内部类方法和非静态方法
静态内部类只能访问外部类的静态成员
作用:简化创建对象,方便外部访问
局部内部类访问局部变量
//调用局部内部类必须在方法中建立局部内部类对象调用
局部变量必须是最终的,用final修饰//jdk1.8不需要
why? 生命周期
局部变量的生命周期随着方法的建立二建立,随着方法的消失而消失
对象存储在堆内存,其生命周期随着对象的建立而产生,随着垃圾回收器的回收而消失
极有可能出现一种情况,方法以及消失了(包括局部变量)而对象还没被垃圾回收器回收
就不能使用局部变量了
加上final修饰后局部变量变为常量,纳入方法区的常量池,常量池的生命周期
随着方法的建立二建立,随着方法的消失而消失
匿名内部类:局部内部类的简化
前提:需要一个类或者接口
格式;new 类名/接口名(){方法重写}; new Jump(){public void jump(){System.out.println("跳高")}};
本质: 就是继承一个类或者实现接口的子类对象
匿名内部类中this关键字:
this表示的是匿名内部类的对象
public interface Inter {
public static final int a = 23 ;
}
public class Test {
public static void main(String[] args) {
new Inter() {
public void show() {
System.out.println(this.a);
}
}.show();
}
}
0 0
- day09-10
- day09
- day09
- day09
- day09
- day09
- day09
- day09
- day09
- day09
- day09
- Day09
- day09
- day09
- 作业day09
- day09总结
- day09-servlet
- python day09
- day01-04
- ApplicationContext——FileSystemXmlApplication(二)
- spark RDD算子(一) parallelize,makeRDD,textFile
- day05-08
- BNUOJ 52297 Coins——打表
- day09-10
- system design primer
- Scheme 语言概要(下)
- day11
- js代码
- day12
- 网络(一) 之 TCP三次握手
- Android之DOM生成XML文件
- css代码