文档章节

java之动态绑定(多态)、抽象类、接口【6】

kongjunli
 kongjunli
发布于 2016/08/12 19:18
字数 594
阅读 3
收藏 0

一、动态绑定

指在执行期间(run,分配内存)而非编译期间判断所引用对象的实际类型,根据实际类型调用相关方法。

其存在的必要条件

  • 要有继承
  • 要有重写
  • 父类引用指向子类对象

 

package practice;
class Animal{
	private String name;
	Animal(String name){
		this.name=name;
	}
	public void enjoy(){
		System.out.println("叫声........");
	}
}
class Cat extends Animal{
	private String eyescolor;
	Cat(String name,String color){
		super(name);
		this.eyescolor=color;
	}
	public void enjoy(){
		System.out.println("猫叫.........");
		
	}
}
class Dog extends Animal{
	private String furcolor;
	Dog(String name,String color){
		super(name);
		this.furcolor=color;
	}
	public void enjoy(){
		System.out.println("狗叫。。。。。。");
	}
}
class Lady{
	private String name;
	Animal pet;
	Lady(String name,Animal animal){
		this.name=name;
		this.pet=animal;
		
	}
	public void myPetEnjoy(){
		pet.enjoy();//根据new的对象来决定调用哪一个方法
	}
}
public class TestLady {
public static void main(String args[]){
	Cat cat=new Cat("mimi","black");
	Dog dog=new Dog("wangwang","white");
	Lady l1=new Lady("lili",cat);
	Lady l2=new Lady("wenwne",dog);
	l1.myPetEnjoy();
	l2.myPetEnjoy();
}
}
结果:猫叫.........
狗叫。。。。。。

共有三个enjoy()函数,所以myPetEnjoy()函数中具体调用哪一个enjoy()函数由new的对象来决定

二、抽象类及抽象方法

  • 抽象方法类似c++中的纯虚函数
  • 含有抽象方法的类必须声明为抽象类
  • 抽象类不能被实例化,也可以理解为没有构造函数,抽象方法必须被重写
package practice;
abstract class Animal{

    abstract void getinfo();
}
class Pig extends Animal{
	private String name;
	private int height;
	private int weight;
	Pig(String name, int height, int weight) {
		this.name=name;
		this.height=height;
		this.weight=weight;
	}
	

	void getinfo(){
		System.out.println("name:"+name+" "+"height:"+height+" "+"weight:"+weight);
	}
}
public class _abstract {
public static void main(String args[]){
	Pig pig=new Pig("lulu",20,30);
	pig.getinfo();
}
}
结果:name:lulu height:20 weight:30

三、接口

class<name>extends<superclass>implements<interfacename>

  • 一种特殊的抽象类
  • 只包含public static final常量和抽象方法,但是abstract可以省略

接口特性:

  • 多重实现(一个类可以实现多继承)
  • 接口中只能定义抽象方法,而且这些方法只能默认为public
  • 接口可以继承其他接口
    package practice;
    interface Singer{
    	public  int age=20;
    	public void sing();
    	public void sleep();
    }
    interface  Painter{
    	public int age=30;
    	public void paint();
    	public void sleep1();
    }
      class People implements  Singer,Painter{
    
    	@Override
    	public void sing() {
    		// TODO Auto-generated method stub
    		System.out.println("I'm singing......");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("I'm sleep......");
    		
    	}
    	@Override
    	public void paint() {
    		// TODO Auto-generated method stub
    		System.out.println("I'm sleeping....");
    	}
    
    	@Override
    	public void sleep1() {
    		// TODO Auto-generated method stub
    		System.out.println("You are sleeping...");
    	}
    	
    }
    public class TestInterface {
    public static void main(String args[]){
    	People people=new People();
    	people.sing();
    	people.sleep();
    	people.paint();
    	people.sleep1();
    }
    结果:I'm singing......
    I'm sleep......
    I'm sleeping....
    You are sleeping...
    

     

© 著作权归作者所有

共有 人打赏支持
kongjunli
粉丝 0
博文 25
码字总数 7291
作品 0
西安
程序员
多态在 Java 和 C++ 编程语言中的实现比较

众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C++ 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对...

Jerikc
2013/12/03
0
1
115个Java面试题及回答

解释下可用的线程状态. 在执行期间, 线程会处于以下状态中的一种: Runnable: 线程已准备就绪, 但没有立即运行. Running: 处理器正在执行的线程代码. Waiting: 处于阻塞状态的线程, 等待外部某...

Yamazaki
2014/04/25
0
0
Java入门需掌握的30个基本概念

(1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。 (2)分布...

风一样
2011/08/03
0
0
Java多态性详解——父类引用子类对象

面向对象编程有三个特征,即封装、继承和多态。   封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。   继承是为了重用父类代码,同时为实...

LCZ777
2014/08/25
0
0
「JAVA基础」面向对象的特征有哪些方面

老师为大家整理JAVA基础:面向对象的特征有哪些方面 面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关...

启示录是真的
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway真的有那么差吗?

前言 Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版的Zuul 2在经过了多次跳票之后,对于Spring这样的整...

Java小铺
32分钟前
1
0
SpringBoot远程调试,远程debug你的线上项目

开发环境中代码出错了,可以利用IDE的debug功能来进行调试。那线上环境出错呢? 一、假设我们的项目是部署在tomcat中,那我们就需要对tomcat进行一定对配置,配置如下。 1. windows系统中,找...

nonnetta
37分钟前
0
0
JAVA秒杀优化方向

秒杀优化方向 将请求尽量拦截在系统上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小,我们可以通过限流、...

小贱是个程序员
45分钟前
0
0
C# 统计字符串中大写字母和小写字母的个数

static void Main() { int count1 = 0; int count2 = 0; Console.WriteLine("请输入字符串"); string str = Convert.ToString(Consol......

熊二的爸爸是谁
47分钟前
0
0
分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是...

老道士
53分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部