Java笔记第八课(多态&抽象类&接口)
来源:互联网 发布:linux nobody启动程序 编辑:程序博客网 时间:2024/06/06 09:13
一.多态
定义:多态指一个事物在不同时刻体现出来的不同状态
1)多态存在的三个必要条件
1.要有继承;
2.要有重写;
方法重写:要求返回值类型也要相同的.不能改变返回值类型
3.父类引用指向子类对象。(向上转型)(三者缺一不可,必须熟记)
2)多态的成员访问特点:
成员变量:
编译看左边,运行看左边
成员方法:
编译看左,运行看右;由于存在方法重写,所以就运行最终的就是子类的成员方法
静态成员方法:
编译看左,运行看左
构造方法:还是对象进行初始化,由于是一种继承关系,还是分层初始化!
3)多态的好处及弊端?如何解决多态的弊端?
多态的好处:
a.提高代码的维护性 多态对已存在代码具有可替换性(由继承保证)
b.提高代码的扩展性(由多态保证)
c.多态简化对应用软件的代码编写和修改过程
多态的弊端:
不能访问子类的特有功能
解决方案:
a.创建子类的具体对象,来访问自己的特有功能;虽然可以解决多态的弊端,但是从内存角度考虑,需要创建子类对象,那么必须在堆内存开辟空间,
b.将子类的引用指向父类对象即向下转型:将父类的引用强制转换为子类的引用(前提必须有父类的引用存在);
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
关于转型:
比如有2个类 A B A继承B 先 B b = new B(); 这个时候 A a = b; 这种用法就是向上转型 使用父类的引用 引用子类对象 向上转型是自动的不需要其他操作 在上边的基础上 b = (B) a 这个就是向下转型 当用父类引用 引用子类对象 现在想不使用父类的引用 而使用子类的引用 就是向下转型 向下转型必须强制转型 必须确定对象确实是子类对象
关于final的问题
final关键字可以用来修饰类,修饰类的成员变量,修饰成员方法。
特点:如果修饰类则该类不能被继承,如果修饰成员方法则改方法不能被重写,如果修饰成员变量则该成员变量不能被修改。大多数情况,final一般跟public static一起使用!
3:final关键字的面试题?
A:修饰局部变量
B:初始化时机
A 基本数据类型:如果局部变量是基本数据类型被final修饰后,其值不能被改变。
引用数据类型:如果引用类型被final修饰,那么就不能再重新分配堆内存空间,但可以改变成员变量的值!
B 初始化时机:构造代码块中可以进行初始化。
构造方法中可以进行初始化。
定义成员变量的时候可以进行初始
class Outer5{//外部类的成员变量//public int num = 100 ;private int num = 100 ;//外部类的成员方法public void method(){//局部变量 final int num2 = 200 ;//自定义常量(细节问题)//局部位置class Inner5{//局部内部类的成员方法public void show(){System.out.println(num);//局部内部类中访问局部变量System.out.println(num2); //jdk1.7才会有这个错误!jdk1.8---->封装好了,所以不会出现错误!}}Inner5 i = new Inner5() ;i.show() ;}}
二. 抽象类
概念:使用了关键词abstract声明的类叫作“抽象类“。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract,当一个类中如果有抽象功能(抽象方法)的时候,那么这个类一定要定义为抽象类
1)抽象类成员特点? 1.抽象方法:没有方法体的一个方法 public abstract void eat() ;2.抽象的子类 abstract class Cat extends Animal{}抽象类的子类的特点: 抽象类的子类是抽象类,那么没有意义!最终使用的就是通过子类进行对象初始化的,如果子类都被抽象修饰了,那么也不能创建对象,所以没意义2)关于抽象类:
a.一个抽象类如何进行实例化:通过抽象类多态形式:父类的引用指向子类对象,通过子类进行初始化!b.一个抽象类中可以有非抽象方法吗?一个抽象类中可以抽象,也可以有非抽象的c.抽象类不能实例化:抽象类不能创建对象3)抽象类多态:
强制子类必须重写当前抽象的父类中所有的抽象方法
还可以提高代码的维护性(里面继承关系保证!)* 抽象类的小问题 A:一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义? B:abstract不能和哪些关键字共存 A. 可以,不能让创建对象。 B. final private static 和 abstract不能共存三.接口1).接口的概述及其特点?概述:接口体现的是一种扩展功能。 特点:接口里面的方法只能是抽象方法。2).接口的成员特点? 1.成员变量:Interface 接口名{ } 接口不能实例化,必须通过过子实现类进行初始化。因此子实现类不能为抽象类,否则没有意义。 class 子实现类名 implements 接口名{ }只能是常量:存下默认修饰符:public static final (永远建议自己给出默认修饰符) 2.构造方法: 接口是没有构造方法的 3.成员方法: 接口中的成员方法默认修饰符:public abstract3).抽象类和接口的区别?
1.成员的区别: 成员变量: 抽象类:成员变量可以是常量,也可以是变量 接口:成员变量只能是一常量:存在默认修饰符:public static final 构造方法: 抽象类:可以有无参构造,有参构造方法 作用:通过子类进行数据初始化(通过子类创建对象) 接口:没有构造方法的 成员方法的区别: 抽象类:可以有抽象方法,也可以有非抽象方法 接口:只能是抽象方法:存在默认修饰符:public abstract 2.关系的区别: 类与类的关系: 继承关系:extends,java中只支持单继承,不支持多继承,但是可以多层继承! 类与接口的关系: 实现关系:implements,并且,一个类在继承另一个类的同时,可以实现多个接口 (class 子实现类名 enxtends Object implements 接口名1,接口名2...) 接口与接口的关系 继承关系:extends,可以支持单继承,也可以多继承! 3.设计理念的区别: 抽象类: 体现的是一种"is a"的关系,存在继承关系!(抽象类多态) 接口: 体现的是一种"like a"的关系,由于接口的一种扩展功能*接口练习题
老师和学生案例,加入抽烟的额外功能
分析:具体到抽象 学生: 成员变量:姓名,年龄 构造方法:有参/无参 成员方法 老师: 成员变量:姓名,年龄 构造方法:有参/无参 成员方法 人类:persen类:抽象类 eat();抽象功能 学生继承自persen 老师继承自persen 部分学生和老师具有吸烟功能: 接口:smoking 的抽象功能 实现:抽象到具体
package org.westos_08_接口;//测试类public class Test {public static void main(String[] args) {SmokingStudent ss = new SmokingStudent();ss.setName("吴彦祖");ss.setAge(21);System.out.println(ss.getAge()+" "+ss.getName());ss.sleep();ss.eat();ss.study();ss.smoking();System.out.println("---------------------");//有参构造数据初始化ss = new SmokingStudent("彭于晏",20);System.out.println(ss.getAge()+" "+ss.getName());ss.sleep();ss.eat();ss.study();ss.smoking();}}
- Java笔记第八课(多态&抽象类&接口)
- java第八次课后笔记——抽象类、接口
- java笔记-----抽象类、接口、多态
- 【第八课】抽象类和接口---接口的基础
- Java学习笔记2016.2.18 多态、抽象类、接口
- Java学习笔记(一)----封装 继承 多态 抽象 接口
- java学习笔记(类、抽象类和接口)
- JAVA复习笔记--------类(四)接口和抽象类
- (复习笔记之JAVA)接口、抽象类
- JAVA学习笔记(六)抽象类与接口
- Java之学习笔记(22)------------抽象类和接口
- java学习笔记(十六)抽象类与接口
- JAVA学习笔记(抽象类和接口)
- Java复习笔记(三)-----抽象类和接口
- java笔记 抽象类和接口总结
- java笔记之抽象类和接口
- java抽象类和接口(学习笔记)
- Java接口与抽象类学习笔记
- LibreOj 6004 圆桌聚餐
- JavaScript基础 操作符字符串的隐性转换
- win7,64位,anaconda搭建TensorFlow
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第八题:四平方和
- 发货和待发货的切换(自己封装data数据)
- Java笔记第八课(多态&抽象类&接口)
- Android-new-build-system
- 封装okhttp
- ViewPage添加小圆点
- 实用的手机扫描识别车牌号
- Linux(Ubuntu14.04)+MySQL Community Server 5.7.17安装(5.7.17deb安装包)
- 40个Java多线程问题总结
- CentOS7安装使用selenuim+chrome
- ipa重签名