黑马程序员_java基础之面向对象多态及内部类
来源:互联网 发布:pps网络电视播放器 编辑:程序博客网 时间:2024/05/24 07:03
------- android培训、java培训、期待与您交流! ----------
1.多态的概述及其代码体现
A:多态概述: 事物存在的多种形态B:多态前提: a:要有继承关系。b:要有方法重写。
c:要有父类引用指向子类对象。多态中的成员访问特点A:多态中的成员访问特点 a:成员变量 编译看左边,运行看左边。b:成员方法 编译看左边,运行看右边。 c:静态方法 编译看左边,运行看左边。 (静态和类相关,算不上重写,所以,访问还是左边的)面向对象(多态的好处和弊端)A:多态的好处 a:提高了代码的维护性(继承保证) b:提高了代码的扩展性(由多态保证)C:多态的弊端: 不能使用子类的特有功能。public static void main(String[] args){Student s = new BaseStudent();s.setName("小李");s.setId(23);s.show();s.study();System.out.println("--------");Student s1 = new BaseStudent("名誉",25);s1.show();s1.study();}}abstract class Student {private String name ;private int id ;public Student(){}public Student(String name,int id){this.name = name;this.id = id;}public void setName(String name) {this.name = name;}public String name(){return name;}public void setId(int id){this.id = id;}public abstract void study();public void show(){System.out.println(name + id);}}class BaseStudent extends Student {public BaseStudent(){}public BaseStudent(String name,int id){super(name,id);}public void study(){System.out.println("学习JAVA基础");}}class WorkStudent extends Student {public WorkStudent(){}public WorkStudent(String name,int id){super(name,id);}public void study(){System.out.println("学习JAVA就业");}}2.抽象类的特点
抽象类特点 a:抽象类和抽象方法必须用abstract关键字修饰 abstractclass 类名 {} public abstract void eat(); b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类 c:抽象类不能实例化那么,抽象类如何实例化呢? 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。 d:抽象类的子类 要么是抽象类 要么重写抽象类中的所有抽象方法抽象类的成员特点 a:成员变量:既可以是变量,也可以是常量。 b:构造方法:有。 用于子类访问父类数据的初始化。 c:成员方法:既可以是抽象的,也可以是非抽象的。抽象类的成员方法特性: a:抽象方法强制要求子类做的事情。 b:非抽象方法子类继承的事情,提高代码复用性。面试题1 一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义? 可以,这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成面试题2 abstract不能和private ,finl ,static关键字共存int num = 10;public abstract void show();}//抽象类是不能被实例化的,所以不能Person p = new Person();class PersonDemo {public void method(Person p) {//Person p = new Demo()p.show();}}class PersonTest {public static void main(String[] args) {//如何调用PersonDemo中的method方法呢?PersonDemo pd = new PersonDemo ();/*pd.method(new Person() {//匿名内部类当作参数传递public void show() {System.out.println("show");}});*/pd.method(new Demo());//也可以定义有名字的类继承Person}}class Demo extends Person {public void show() {System.out.println("show");}}3.接口的概述及其特点
接口概述 从狭义的角度讲就是指java中的interface 从广义的角度讲对外提供规则的都是接口接口特点 a:接口用关键字interface表示: interface 接口名 {} b:类实现接口用implements表示: class 类名 implements 接口名 {} c:接口不能实例化 : 按照多态的方式来实例化。 d:接口的子类 a:可以是抽象类。但是意义不大。 b:可以是具体类。要重写接口中的所有抽象方法。(推荐)接口成员特点 成员变量;只能是常量,并且是静态的。 默认修饰符:public static final 建议:自己手动给出。 构造方法:接口没有构造方法。 成员方法:只能是抽象方法。 默认修饰符:public abstract 建议:自己手动给出。4.面向对象(类与类,类与接口,接口与接口的关系)
A:类与类,类与接口,接口与接口的关系 a:类与类: 继承关系,只能单继承,可以多层继承。 b:类与接口: 实现关系,可以单实现,也可以多实现。 并且还可以在继承一个类的同时实现多个接口。 c:接口与接口: 继承关系,可以单继承,也可以多继承。面向对象(抽象类和接口的区别) A:成员区别 抽象类: 成员变量:可以变量,也可以常量 构造方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量 成员方法:只可以抽象 B:关系区别 类与类: 继承,单继承 类与接口: 实现,单实现,多实现 接口与接口: 继承,单继承,多继承C:设计理念区别 抽象类被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。 接口被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。导包格式: import 包名; 注意: 这种方式导入是到类的名称。public static void main(String[] args) {Outer o = new Outer();o.method();}}//匿名内部类interface Inter {public void print();}class Outer {//这是外部类/*class Inner implements Inter{//这是内部类public void print() {System.out.println("Hello World!");}}public void method() {//Inner i = new Inner();//直接创建子类对象//i.print();new Inner().print();Inter i2 = new Inner();//父类引用指向子类对象i2.print();}*///匿名内部类public void method() {/*new 接口或类(){实现这个接口或继承这个类写需要重写的方法}*/new Inter(){//整个代表Inter的子类对象public void print() {System.out.println("Hello World!");}}.print();//调用重写后的方法}}5.四种权限修饰符
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包 private Y 默认 Y Y protected Y Y Y public Y Y Y Y面向对象(类及其组成所使用的常见修饰符)A:修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstractB:类: 权限修饰符:默认修饰符,public 状态修饰符:final 抽象修饰符:abstract 用的最多的就是:publicC:成员变量: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 用的最多的就是:private D:构造方法: 权限修饰符:private,默认的,protected,public 用的最多的就是:public E:成员方法: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 用的最多的就是:public F:除此以外的组合规则: 成员变量:public static final 成员方法: publicstatic public abstract *public final6.内部类访问特点
a:内部类可以直接访问外部类的成员,包括私有。 b:外部类要访问内部类的成员,必须创建对象。 外部类名.内部类名 对象名 = 外部类对象.内部类对象;静态成员内部类成员内部类被静态修饰后的访问方式是: 外部类名.内部类名 对象名 = 外部类名.内部类对象;7.局部内部类访问局部变量必须用final修饰
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用8.匿名内部类的格式
匿名内部类: 就是内部类的简化写法。前提:存在一个类或者接口 这里的类可以是具体类也可以是抽象类。格式: new类名或者接口名(){ 重写方法; }本质:是一个继承了该类或者实现了该接口的子类匿名对象。
0 0
- 黑马程序员_java基础之面向对象多态及内部类
- 黑马程序员_java基础之面向对象封装及继承
- 黑马程序员_Java语言_面向对象_内部类
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 黑马程序员-java基础-面向对象-多态和内部类
- “黑马程序员”java面向对象基础_内部类
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员--Java学习日记之面向对象(多态和匿名内部类)
- 黑马程序员_Java语法及面向对象基础<一>
- 黑马程序员-(10)Java基础之面向对象(五)内部类
- 黑马程序员_java基础篇之面向对象
- 黑马程序员_Java基础Day05_面向对象之封装(Done)
- 黑马程序员_Java基础Day07_面向对象之继承(Done)
- 黑马程序员_java基础篇之面向对象(1)
- 黑马程序员_java基础篇之面向对象(2)
- 黑马程序员_java基础篇之面向对象(3)
- 黑马程序员_java基础篇之面向对象(4)
- 服务端工程师入门与进阶 Java 版
- PHP设计模式——策略模式
- 第八周上机项目3 分数类中的运算符重载
- JavaAPI
- # NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(落后的小岛-最小生成树-并查集迭代路径优化与不优化对比)[Hobo]
- 黑马程序员_java基础之面向对象多态及内部类
- 简单三维几何,判断俩个三角形是否相交
- 单片机程序员的面试
- C++实现模式--单例
- 服务端技术选型
- 深入理解JNI
- bzoj-1503 郁闷的出纳员
- CodeForces 151B Phone Numbers(简单模拟)
- D3D变换的理解