文档章节

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

kongjunli
 kongjunli
发布于 2016/08/12 19:18
字数 594
阅读 3
收藏 0
点赞 0
评论 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
博文 24
码字总数 7291
作品 0
西安
程序员
作为一个java程序员这些技能你都知道吗?

一、Java特点 1、 面向对象 尽管受到其前辈的影响,但Java没被设计成兼容其他语言源代码的程序。这允许Java开发组自由地从零开始。这样做的一个结果是,Java语言可以更直接、更易用、更实际的...

java高级架构牛人 ⋅ 05/23 ⋅ 0

「JAVA基础」面向对象的特征有哪些方面

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

启示录是真的 ⋅ 06/01 ⋅ 0

有一到五年开发经验的JAVA程序员需要掌握的知识与技能!

JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此...

java高级架构牛人 ⋅ 06/02 ⋅ 0

Java面试2018常考题目汇总及答案带走不谢!

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等...

java高级架构牛人 ⋅ 06/14 ⋅ 0

2018年Java编程学习面试最全知识点总结

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/14 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的 ⋅ 05/26 ⋅ 0

java编程新手入门基础知识学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/15 ⋅ 0

Java就业变难了?你需要对自己有点信心

伴随着IT的火热,越来越多的人进入了IT领域,这在进一步推动着IT发展的同时也极大增加了就业压力。伴随着激烈的岗位竞争,越来越多的人开始感叹工作难找,越火的行业越是如此,Java自是首当其...

糖宝_d864 ⋅ 06/08 ⋅ 0

Java基础进阶 第四天 抽象接口多态

今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为; 猫的行为:抓老鼠;吃...

Villain丶Cc ⋅ 06/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

关于“幂等”操作

一个幂等(idempotent)操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 开发中, 我们经常考虑幂等操作的场景有“接口调用”、“MQ消费”、“自动任务”等 接口调用, 可能出现...

零二一七 ⋅ 26分钟前 ⋅ 0

Dubbo服务服务暴露之ProxyFactory Invoker

Dubbo服务暴露过程中有涉及到调用ProxyFactory 中方法获取Invoker对象的过程,现在我们来深究下源码,来看下这个过程是在做些什么,返回的Invoker 对象是什么,我们来看一下代码的切入点: ...

哲别0 ⋅ 41分钟前 ⋅ 0

GP两种连接方式性能测试

GP两种连接方式性能测试 Pivotal import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class GPQueryStrin......

仔仔1993 ⋅ 45分钟前 ⋅ 0

jsonrpc-4j代码解析

解析文件 AutoJsonRpcServiceImplExporter JsonServiceExporter AutoJsonRpcServiceImplExporter 路径:com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter AutoJsonRpcServi......

郭恩洲_OSC博客 ⋅ 今天 ⋅ 0

百度搜索

from selenium import webdriver import time brower=webdriver.Firefox() brower.get('http://www.baidu.com') input=brower.find_element_by_id('kw') input.send_keys('中南大学') time.s......

南桥北木 ⋅ 今天 ⋅ 0

tomcat 日志记录器

1、日志记录器是记录消息的组件 日志记录器需要与某个servlet 容器相关联 2、Logger 接口 共定义了5种日志级别:FATAL、ERROR、WARNING、INFORMATION、DEBUGGER setVerbosity 设置级别 setC...

职业搬砖20年 ⋅ 今天 ⋅ 0

Thrift RPC实战(三) Thrift序列化机制

1.Thrift基础架构 Thrift是一个客户端和服务端的架构体系,数据通过socket传输; 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports); 通过IDL脚本对传输数据的数据结构...

lemonLove ⋅ 今天 ⋅ 0

网站建设就要像2018世界杯的俄罗斯队大杀四方[图]

今天心情不错,因为昨天晚上观看了世界杯比赛,尤其是对俄罗斯队的大杀四方感到十分霸气侧漏啊,因此我联想到了自己的博客网站,我的博客是去年年底上线的,一直想建设一个关于读书和读后感作...

原创小博客 ⋅ 今天 ⋅ 0

linux 信号机制

signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协...

xxdd ⋅ 今天 ⋅ 0

my.cnf, my-small.cnf, my-medium.cnf, my-large.cnf

1. my-small.cnf # Example MySQL config file for small systems.## This is for a system with little memory (<= 64M) where MySQL is only used# from time to time and it's importa......

周云台 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部