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("狗刨");
	}
}

  

 多态内存图

    类转化异常

      

  

时间: 2024-10-21 22:55:51

day03(接口,多态)的相关文章

面向对象(接口 ,多态)

接口 (1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口 ,接口是功能的集合 接口不能创建对象 (2)格式 父接口:public interface Tnter{ } 子类:public class interImp implements Itner{ } 接口的使用 1.接口不能创建对象 2.定义实现类来实现接口 实现的关键字 implements 3.重写抽象方法 4.创建实现类对象 调用方法 接口的特点 1.不需要被abstract 修饰 2.类实现接口,可以单实

我的学习之路_第二章_接口/多态

接口 (1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口.接口是功能的集合 接口不能创建对象 (2)格式: 父接口: public interface Inter { } 子类: public class InterImpl implements Inter { } (3)接口的特点: A:不需要被abstract修饰. B:类实现接口,可以单实现,还可以多实现. C:接口可以继承接口,可以单继承,也可以多继承. D:接口与父类的功能可以重复,均代表要具备某种功能. (

抽象类 接口 多态

一 抽象类(abstract) 抽象类的概念只抽取了很多类的方法的声明,方法声明用abstract修饰.一个类如果有抽象方法,那么这个类必须是抽象类.抽象类里边可以没有抽象方法,如果这么做只有一个目的:不让你创建这个类的对象.抽象类不能被实例化,不能创建对象.如果一个类继承抽象类,那么,它要么重写抽象类中的所有抽象方法,要么本身也是抽象类. 抽象类的成员成员变量:可以是常量,也可以是变量.子类可以直接继承抽象类中的成员变量.成员方法:可以是抽象的,也可以是非抽象的.抽象方法在子类中必须要被实现.

接口--多态

1.写出定义接口的格式 interface A{     public abstract void work(); } 注: (1)接口的权限修饰符如果不标明,默认为default,仅可在本包中访问; (2)接口中的方法必须为抽象方法,且public abstract可以不写,默认为public abstract.实际开发中通常写为 public void work(); (3)接口的子类叫做实现类,命名方式一般为:接口名+Impl,如InterfaceImpl; (4)java8中有新特性,可

instanceof 操作符 接口 多态

instanceof 操作符result =  对象名称 instanceof 类型 参数:result:布尔类型. 对象名称:必选项,任意对象表达式. 类型:必选项,任意已定义的类,可以是api中的类,也可以说自定义的类. 说明:如果对象是这个类型的实例,则instanceof运算符返回true.如果对象不是指定类的一个实例,或者对象是null,则返回false Object类Object类是所有类的父类object类的作用object类中的方法 接口 是特殊的抽象类即所有方法都是抽象方法的类

接口多态实现窗体传递

public interface IFillAreas { void FillAreas(string ids, string names); //接口中定义方法签名 } public partial class FrmPerson : Form,interfaces.IFillAreas //窗体继承于接 private void btnChoice_Click(object sender, EventArgs e) { FrmAreas frm = new FrmAreas((interfa

day24 继承 接口 多态

抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 class Alipay: ''' 支付宝支付 ''' def pay(self,money): print('支付宝支付了%s元'%money) class Applepay: ''' apple pay支付 ''' def pay(

Java复习_4 接口多态和内部类

△abstract不可以修饰成员变量 △一个类可以没有抽象方法,可以定义为抽象类,这样的目的是不能让其他类建立本类对象,交给子类完成. △abstract和static(可以被类名调用方法,但是抽象方法调用没有意义)final(不能被覆盖方法)private(私有方法无法覆盖) △接口只能被实现.被用接口去继承或者用类或者抽象类去实现 △接口中定义的变量全部是常量.关键修饰符为Public static final.接口中没有构造方法,实现接口的类构造方法访问的是object,接口中的方法是Pu

设计模式-接口多态

<?php//飞行接口interface Flyable { function fly($obj);}//飞行接口类的具体实现class Action implements Flyable{ function fly($obj){ if($obj instanceof Aduck){ echo 'Aduck is flying<br/>'; }else if($obj instanceof Bduck){ echo 'Bduck is flying<br/>'; }else{