day03(接口,多态)
接口:
概念:是功能的集合,可以当做引用数据类型的一种。比抽象类更加抽象。
接口的成员:
成员变量:必须使用final修饰 默认被 public & static & final修饰 不允许修改
成员方法:必须是抽象方法 默认是抽象方法 创建方法时可以省略。(开发时建议写上,好辨识)
构造方法:没有
public interface Inter01 {
public static final int NUM=10;
public abstract void eat();
特点:
1.打破了常规的单继承,接口可以多继承,也可以多层继承
2.成员方法都是抽象方法,成员变量必须被final修饰。
3.不能创建对象(因为接口里面都是抽象方法,调用没有意义)
4.子类必须实现所有成员方法。
public interface Inter01 {
public static final int NUM=10;
public abstract void eat();
public abstract void sleep();
}
interface Inter03{
}
//体现了多继承 打破了类的单继承
interface Inter02 extends Inter01,Inter03{
}
class Test implements Inter01{//实现接口的所有方法
@Override
public void eat() {
}
@Override
public void sleep() {
}
}
接口和类的关系
A:类与类之间:继承关系,一个类只能直接继承一个父类,但是支持多重继承
B:类与接口之间:只有实现关系,一个类可以实现多个接口
C:接口与接口之间:只有继承关系,一个接口可以继承多个接口
接口的优点
1.类与接口的关系,实现关系,而且是多实现,一个类可以实现多个接口,类与类之间是继承关系,java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性。
2.对外提供规则(USB接口)
3.降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)

多态:
概念:父类在不同的时候表现出不同的状态。
实现多态的前提:1.继承
2.重写
3.父类引用指向子类对象
实现多态的三种格式
普通类实现多态
class Fu{
public void eat(){
System.out.println("Fu 吃饭");
}
}
class Zi extends Fu{
@Override
public void eat(){
System.out.println("Zi 吃饭");
}
}
public class Inter01{
public static void main(String[] args) {
Fu f=new Zi();//父类引用指向子类对象
f.eat();//Zi 吃饭
}
}
抽象类实现多态
abstract class Fu{
public abstract void method();
}
class Zi extends Fu{
@Override
public void method(){
System.out.println("子类重写了父类的方法method");
}
}
public class Inter01{
public static void main(String[] args) {
Fu f=new Zi();//父类引用指向子类对象
f.method();//子类重写了父类的方法method
}
}
接口实现多态
interface Inter02{
public abstract void jump();
}
class Cat implements Inter02{
public void jump() {
System.out.println("猫可以调高");
}
}
class tiger implements Inter02{
@Override
public void jump() {
System.out.println("老虎会调高");
}
}
public class Class01{
public static void main(String[] args) {
Inter02 i=new tiger();
i.jump();
}
}
多态的成员特点
成员变量: 仅仅只是该事物的外在特征描述
编译时看左边 运行时看左边
成员方法: 功能描述
编译时看左边 运行数看右边
静态方法:不能被重写
编译时看左边 运行时看左边
public class PoymorphicDemo2 {
public static void main(String[] args) {
Dad d = new Kid();
//System.out.println(d.num);
//d.method();
d.function();//使用变量去调用静态方法,其实相当于用变量类型的类名去调用
}
}
class Dad {
int num = 20;
public void method() {
System.out.println("我是父类方法");
}
public static void function() {
System.out.println("我是父类静态方法");
}
}
class Kid extends Dad {
int num = 10;
public void method() {
System.out.println("我是子类方法");
}
public static void function() {
System.out.println("我是子类静态方法");
}
}
多态中的向上转型和向下转型
向上转型 自动转型
父类 父=new 子类();
向下转型 子类 子=(子类)父;
举例:孔子装爹
向上转型 孔子装他爹
向下转型 孔子脱了衣服
/*
*
* 多态中的向上转型和向下转型:
*
* 引用类型之间的转换
* 向上转型
* 由小到大(子类型转换成父类型)
* 向下转型
* 由大到小
* 基本数据类型的转换
* 自动类型转换
* 由小到大
* byte short char --- int --- long --- float --- double
* 强制类型转换
* 由大到小
*
*
*
*/
public class PoymorphicDemo3 {
public static void main(String[] args) {
Animal2 a = new Dog();//向上转型
//a.eat(); Dog d = (Dog)a;//向下转型
d.swim(); }
} class Animal2 {
public void eat() {
System.out.println("吃东西");
}
} class Dog extends Animal2 {
public void eat() {
System.out.println("啃骨头");
} public void swim() {
System.out.println("狗刨");
}
}
多态内存图

类转化异常

day03(接口,多态)的更多相关文章
- java 面对对象(抽象 继承 接口 多态)
什么是继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接 ...
- Java学习笔记 抽象类 接口 多态
instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- 接口&&多态&&构造函数&&关键字
day06 抽象类的局限性(与接口的区别) 抽象类可以定义非抽象方法,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;jdk1.8之后接口可以包含默认方法. 一个类只能继承一个直接父类 ...
- JavaSE 复习_4 接口多态和内部类
△abstract不可以修饰成员变量 △一个类可以没有抽象方法,可以定义为抽象类,这样的目的是不能让其他类建立本类对象,交给子类完成. △abstract和static(可以被类名调用方法,但是抽象方 ...
- JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则
/** * 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类 * 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类 * 2.非抽象类继承抽象类必须实现抽象方法[可以是空实现] * 3.抽象 ...
- 《java JDK7 学习笔记》之接口与多态
1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...
- Java中多态、抽象类和接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...
- final修饰符,多态,抽象类,接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. ...
随机推荐
- OPTION SQL_SELECT_LIMIT=DEFAULT'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ...
- nodejs文件操作笔记
nodejs添加了流的概念,通过流操作文件如行云流水,比早前便利畅快多了. 先来第一个例子,我们建一个stream.js文件,里面内容如下: var fs = require("fs&quo ...
- Java中static代码块,{}大括号代码块,构造方法代码块执行顺序!
注:下列代码中的注释都是JUnit4单元测试运行结果. 首先,没有父类的(父类是Object)的类A package Static.of; public class A { { System.out. ...
- samtools 的应用
1)sam转bam samtools view -bS in.sam > in.bam -b 意思使输出使BAM format -S 意思使输入使SAM,如果@SQ 缺剩, 要写-t
- 解决windows 下mysql 表名自动转成小写的问题
由于web用的是mvc,数据库用的是mysql.为了方便开发,在windows7下面也安装了个mysql,今天在创建表的时候,遇到了个棘手的问题.所有的表名都转成了小写,这不是我要的,作为处女座,是不 ...
- ECMAScript5新特性之获取对象特有的属性
'use strict'; // 父类 function Fruit(){ } Fruit.prototype.name = '水果'; // 子类 function Apple(desc){ thi ...
- PS切图导出代码后出现的图片布局散乱的解决方法——table布局
前言: 一般来说,大部分美工PS切图后导出的都是使用PS默认的table布局的页面,出现最多的异常是上传代码,替换图片后,发现图片布局散乱,完全不是想要的效果.轻微的是浏览器不兼容,只有部分浏览器可以 ...
- 数字组合 · Combination Sum
不能重复: [抄题]: 给出一个候选数字的set(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T.C中的数字可以无限制重复被选取. 例如,给出候选数组[2,3,6,7]和目标数字7,所求 ...
- iOS - OC - XML 解析 - NSXMLParser
//4.解析数据 //4.1 创建XML解析器:SAX NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; //4.2 设置代理 ...
- [leetcode]117. Populating Next Right Pointers in Each NodeII用next填充同层相邻节点
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...