`
编程足球
  • 浏览: 257048 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

java 三大特性--封装、继承和多态理解

    博客分类:
  • java
 
阅读更多
封装
/**
 * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用,
 * 被封装的成员只能通过某些特定的方式才能访问。 
 * 实现封装有两个步骤:
 *   1、将不能暴露的成员隐藏起来,我们就不能让其在类的外部被直接访问或赋值。
 *   	实现方法是将该成员定义为私有的,在成员定义前加上private访问权限修饰符。
 *   2、用公共方法来暴露对该隐藏成员的访问,可以给成员加上public修饰符,将该成员定义为公共的
 */
package com.study.feature;

/**   
 * 
 * @className :Package  
 * @package : com.study.feature 
 * @Description :封装性的测试   
 * @author:lgf   
 * @date :2012 三月 12  10:20:35          
 * @version : 1.0
 */
public class Package {
	// 使用private隐藏
	private String strValue;

	// 通过get和set进行访问
	public String getStrValue() {
		return this.strValue;
	}
	public void setStrValue(String strValue) {
		this.strValue = strValue;
	}
}



继承
父类 ExtendsFather.java
/**
 * 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
 * 对象的一个新类可以从现有的类中派生。
 * 1. 为什么要使用继承?
 * 	a.提高程序的扩展性。
    b.提高了代码的重用性。
    
   2. 子类能继承到父类的那些方法和属性
   	第一种:所有的属性和方法都被子类继承到了。
    第二种:
    a、子类和父类在同一个包下:
    公有的受保护的属性和方法被子类继承到了。
    b、子类和父类不在同一个包下:
    公有的方法和属性被子类继承到了。
    
   3. 子类的对象能调用父类的那些方法和属性?
    a、子类和父类在同一个包下:
    公有的受保护的属性和方法能被子类调用。
    b、子类和父类不在同一个包下:
    公有的方法和属性能被子类调用。
    在类和抽象类中,默认的就是受保护的。
    在接口中,默认的就是公有的。
 */
package com.study.feature;

/**   
 * 父类
 * @className :ExtendsFather  
 * @package : com.study.feature 
 * @Description :继承测试   
 * @author:lgf   
 * @date :2012 三月 12  10:33:02          
 * @version : 1.0
 */
public class ExtendsFather {
	// 定义不同四种修饰符的属性
	private 	String privateValue;
	protected 	String protectedValue;
				String defaultValue;
	public 		String publicValue;
	
	// 定义不同四种修饰符的方法
	private void privateFunction(){
		System.out.println("privateFunction");
	}
	
	protected void protectedFunction(){
		System.out.println("protectedFunction");
	}
	
	void defaultFunction(){
		System.out.println("defaultFunction");
	}
	
	public void publicFunction(){
		System.out.println("publicFunction");
	}
}


同包下的子类 ExtendsChildrenSamePackage.java
package com.study.feature;
/**
* 
* 
* @className :ExtendsChildrenSamePackage  
* @package : com.study.feature 
* @Description : 同一个包下面的继承关系   
* @author:lgf   
* @date :2012 三月 12  10:51:23          
* @version : 1.0
 */
public class ExtendsChildrenSamePackage extends ExtendsFather{
	public static void main(String[] args) {
		ExtendsFather children = new ExtendsChildrenSamePackage();
		//children.privateValue = "no"; 无法访问到
		children.defaultValue = "ok";
		children.protectedValue = "ok";
		children.publicValue = "ok";
		
		//除了private修饰的方法,其他都继承到了
		//children.privateFunction();
		children.defaultFunction();
		children.protectedFunction();
		children.publicFunction();
	}
}



不同包下的子类 ExtendsChildrenOtherPackage.java


/**
 * 
 */
package com.study.featureSecond;
import com.study.feature.ExtendsFather;

/**   
 * 
 * @className :ExtendsChildrenOtherPackage  
 * @package : com.study.featureSecond 
 * @Description :不同包下面的继承关系   
 * @author:lgf   
 * @date :2012 三月 12  10:50:47          
 * @version : 1.0
 */
public class ExtendsChildrenOtherPackage extends ExtendsFather{
	public static void main(String[] args) {
		ExtendsFather children = new ExtendsChildrenOtherPackage();
		//children.privateValue = "no"; 无法访问到
		//children.defaultValue = "no"; 无法访问到
		//children.protectedValue = "no"; 无法访问到
		children.publicValue= "ok";
		
		//除了public修饰的方法,其他都未继承到了
		//children.privateFunction();
		//children.defaultFunction();
		//children.protectedFunction();
		children.publicFunction();
	}
}


重载和重写 ExtendsOverRideLoad.java

/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :ExtendsClass  
 * @package : com.study.feature 
 * @Description :重载和重写   
 * @author:lgf   
 * @date :2012 三月 12  11:00:35          
 * @version : 1.0
 */
public class ExtendsOverRideLoad extends ExtendsFather {
	@Override
	public void publicFunction() {
		//super.publicFunction(); 可以调用父类的方法
		System.out.println("Override publicFunction");
	}
	
	public void publicFunction(String str) {
		//super.publicFunction(); 可以调用父类的方法
		System.out.println("overload publicFunction");
	}
	
	public static void main(String[] args) {
		ExtendsFather child= new ExtendsOverRideLoad();
		
		//Override publicFunction
		child.publicFunction();
		
		//child.publicFunction("s");  仅仅只能使用到父类有的方法,重载的方法无法调用
		
		ExtendsOverRideLoad childSecond = new ExtendsOverRideLoad();
		
		//Override publicFunction
		childSecond.publicFunction();
		
		//overload publicFunction
		childSecond.publicFunction("overLoad");
	}
}



多态

父类  Animal.java

/**
 * 1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的
 * 2. 构造方法是被隐式声明为static方法
 * 3. 动态绑定
 *	将一个方法调用和一个方法主体连接到一起称为绑定(Binding)。 
 *	根据绑定的时机不同,可将绑定分为“早期绑定”和“后期绑定”两种。 
 *	如果在程序运行之前进行绑定(由编译器和链接程序完成),称为早期绑定。 
 *	如果在程序运行期间进行绑定,称为后期绑定,后期绑定也称为“动态绑定”或“运行时绑定”。 
 *	在Java中,多态性是依靠动态绑定实现的,即Java虚拟机在运行时确定要调用哪一个同名方法。 
 *
 *	4. 多态总结
 *		一、使用父类类型的引用指向子类的对象
 *		二、该引用只能调用父类中定义的方法和变量
 *		三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,
 *			将会调用子类中的这个方法;(动态连接、动态调用)
 *		四、变量不能被重写(覆盖),”重写“的概念只针对方法,
 *			如果在子类中”重写“了父类中的变量,那么在编译时会报错。
 *  5. 多态详解 多态是通过: 
 *		5.1 接口 和 实现接口并覆盖接口中同一方法的几不同的类体现的 
 *		2 父类 和 继承父类并覆盖父类中同一方法的几个不同子类实现的.
 *
 *	6. 一个类型引用只能引用引用类型自身含有的方法和变量
 */
package com.study.feature;

/**   
 * @className :Animal  
 * @package : com.study.feature 
 * @Description :多态的测试   
 * @author:lgf   
 * @date :2012 三月 12  13:50:36          
 * @version : 1.0
 */
public class Animal {
	public void eat(){
		System.out.println("eating");
	}
}


多态实现
/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :Cat  
 * @package : com.study.feature 
 * @Description :猫   
 * @author:lgf   
 * @date :2012 三月 12  13:54:01          
 * @version : 1.0
 */
public class Cat extends Animal{
	public void eat(){
		System.out.println("eating fish");
	}
}


/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :Dog  
 * @package : com.study.feature 
 * @Description :狗   
 * @author:lgf   
 * @date :2012 三月 12  13:55:38          
 * @version : 1.0
 */
public class Dog extends Animal{
	public void eat(){
		System.out.println("eating Bone");
	}
}



结果
/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :Main  
 * @package : com.study.feature 
 * @Description :多态测试   
 * @author:lgf   
 * @date :2012 三月 12  13:57:11          
 * @version : 1.0
 */
public class Main {
	
	public static void main(String[] args) {
		Animal animal = null;
		animal = new Animal();
		animal.eat();//eating
		Animal cat = new Cat();
		cat.eat();//eating fish
		Animal dog = new Dog();
		dog.eat();//eating Bone
	}
}



例子2
/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :Father  
 * @package : com.study.feature 
 * @Description :多态   
 * @author:lgf   
 * @date :2012 三月 12  14:53:41          
 * @version : 1.0
 */
public class Father {
	public void functionOne(){
		functionSecond();
	}
	public void functionSecond(){
		System.out.println("Father functionSecond");
	}
}



/**
 * 
 */
package com.study.feature;

/**   
 * 
 * @className :Children  
 * @package : com.study.feature 
 * @Description :测试   
 * @author:lgf   
 * @date :2012 三月 12  14:55:15          
 * @version : 1.0
 */
public class Children extends Father{
	public void functionSecond(){
		System.out.println("Children functionSecond");
	}
	
	public static void main(String[] args) {
		Father c = new Children();
		c.functionOne();//Children functionSecond
	}
}
分享到:
评论

相关推荐

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析

    Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析

    java面向对象三要素封装继承和多态源码

    java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...

    java基础继承封装多态

    本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    OOP 的主要特征包括封装、继承和多态。 1. **封装**:封装是将数据和操作数据的方法捆绑在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式。这样可以减少外部环境对对象的影响和破坏,提高代码的安全性和...

    JAVA封装继承与多态PPT教案学习.pptx

    JAVA 封装继承与多态是面向对象程序设计语言中三个非常重要的概念,正确理解和应用这些概念是编写高质量软件的前提。 在实际应用中,封装、继承和多态三个概念都是相互关联、相互影响的。正确地使用这些概念可以...

    java封装 继承与多态

    java封装 继承与多态 程序设计 类与对象

    封装继承多态总结

    封装继承多态总结

    Java面向对象编程(封装/继承/多态)实例解析

    在 Java 中,面向对象编程主要体现在三大特征:封装、继承和多态。 封装是指隐藏对象的内部细节,而仅暴露必要的信息给外部世界。通过封装,可以保护对象的内部状态,并提供对外部访问的接口。在 Java 中,封装可以...

    封装、继承、多态.docx

    封装、继承、多态 一、 封装 封装是面向对象编程的三大特性之一,它是指将同一类事物的特性与功能包装在一起,对外暴露调用的接口...Java 面向对象的三大特性是:封装、继承与多态。这三大特性是面向对象编程的核心。

    一个实例告诉你什么是封装继承和多态

    封装、继承和多态是面向对象编程的三大特性,它们是Java、C#、Python等许多编程语言中的核心概念。本文将通过一个实例详细解析这三个概念,并以`ConsoleApplication1`为例来阐述。 首先,封装是面向对象编程的基础...

    类的封装、继承和多态

    第3章 类的封装、继承和多态 第4章 接口、内部类和Java API基础 第5章 异常处理 第6章 图形用户界面 第7章 多线程 第8章 Applet应用程序 第9章 输入/输出流和文件操作 第10章 网络通信 第11章 数据库应用 第12章 ...

    《java面向对象程序设计-继承和多态》教案.doc

    面向对象编程是Java的核心特性,本教程主要涵盖了三个关键概念:封装、继承和多态,以及相关的访问修饰符和方法修饰符。 封装是面向对象编程的基础,它涉及到将数据(属性)和操作这些数据的方法(行为)组合在一个...

    设计ATM使用封装、继承和多态.zip

    Design An ATM 设计一个ATM 需求 1)实现余额不足怎么办 2)密码登陆多次错误怎么办 3)检测卡有没有插入成功 要求使用到 封装、继承、多态

    Java实验报告——类的继承、多态的应用

    在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...

    jave 继承、封装、多态

    面向对象编程是Java的核心特性,它包括三个主要概念:封装、继承和多态。下面将分别详细介绍这三个概念以及它们在Java编程中的应用。 **封装**是面向对象编程的基础,它强调将数据和行为捆绑在一起,形成一个独立的...

    教学视频-继承&多态

    多态是指同一种行为在不同对象上有不同的表现形式,它是面向对象的三大特性之一(封装、继承、多态)的重要组成部分。 1. 方法重载(Overloading):在同一个类中,可以定义多个具有相同名称但参数列表不同的方法,...

    WHUT-java多线程实验-第一周-继承、多态.zip

    Java是一种广泛使用的面向对象的编程语言,其强大的并发处理能力使得多线程编程成为Java...通过完成这个实验,学生们将能够更好地理解和应用Java的封装、继承、多态特性,以及在多线程环境下编写高效、安全的代码。

Global site tag (gtag.js) - Google Analytics