`
johnnycmj
  • 浏览: 36916 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

06.面向对象(3)--面向对象3大特性:封装、继承和多态

 
阅读更多

6、面向对象3大特性:封装、继承和多态

 

6.1 封装性:

每个对象都包含了他能进行操作所需要的所有信息,因此对象不必依靠其他的对象来完成自己的操作,这样的特性叫封装。

例如:

   class Person{
        private int age;
	    public void setAge(int i){
		    if(i<0 || i>130)
		    	return;
		    age = i; 
	    }
	    public int getAge(){ 
		return age;
		}
	}
	public class TestPerson{
	    public static void main(String args[]){
            Person p1 = new Person();
		    p1.setAge(3);
		    p1.setAge(-6);
		    System.out.println(p1.getAge());
        }
    }

 

 

 

实现封装可以达到如下目的:

1)隐藏类的实现细节;

2)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

3)便于修改,增强代码的可维护性;

4)可进行数据检查;

 

 

 

6.2 继承性

继承代表了一种“is-a”的关系,个人觉的继承的最大好处是少些好多的代码及多态功能

例如:

class Person{
      public String name;
      public int age;
	  public Person(String name,int age){
		this.name=name;
		this.age=age;
	  }
	  public Person() { //如果你不写这个构造函数,看看对类Student有什么影响。
	  
	  }
      public void getInfo(){
       	System.out.println(name);    
      	System.out.println(age);    
      }
	}
	class Student extends Person{
      public void study(){
      	    System.out.println("Studding");
      }
      
      public static void main(String[] args){
      	Person p=new Person();
      	p.name="person";
      	p.age=30;
      	p.getInfo();
      	
      	Student s=new Student();
        s.name="student";
        s.age=16;
        s.getInfo();
        s.study();
      }
}

 

 

 

在类的继承中,有这样的一些细节问题:

1).通过继承可以简化类的定义,我们已经在上面的例子中了解到了。

2).Java只支持单继承,不允许多重继承。在Java中,一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承,如类X不可能既继承类Y又继承类Z。

3).可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。这种应用如下所示:

	class A {}
	class B extends A{}
	class C extends B{}

 

 

 

4).子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表) 调用父类的构造方法。如:我们为Student类增加一个构造方法,在这个构造方法中我们用super明确指定调用父类的某个构造方法。

	class Student extends Person{
		public Student(String name,int age,String school)
		{
			super(name,age);
			this.school=school;
		}
	}

 

 

 

5).如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。也就是,在下面的类B中定义的构造方法中,写不写super()语句效果是一样的。

	Public class B extends A{
		public B(){
			super();//有没有这一句,效果都是一样的。
		}
	}

 

 

6.3 多态性

定义:是允许将父对象设置成为和一个和多个它的子对象相等的技术,比如Parent=Child 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。 

1).子类转换成父类

例如:

	class A{
		public void func1()
		{
			System.out.println("A func1 is calling");
		}
		public void func2()
		{
			func1();
		}
	}
	class B extends A{
		public void func1()
		{
			System.out.println("B func1 is calling");
		}
	    public void func3()
	    {
			System.out.println("B func3 is calling");
		}
	}
	class C{
		public static void main(String [] args)
		{
			B b=new B();
			A a = b;
			callA(a);
			callA(new B());
		}
		public static void callA(A a)
		{
			a.func1();
			a.func2();
		}
	}

 

 

2).父类转换成子类

例如:

public static void CallA(A a){
		B b=(B)a;
		b.func1();
		b.func2();
		b.func3();
	}

 3).instanceof 操作符

可以用instanceof 判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。还是用上面的代码来举例:

 

public static void CallA(A a){
		if(a instanceof B){
			B b=(B)a;
			b.func1();
			b.func2();
			b.func3();
		}else{
			a.func1();
			a.func2();
		}
	}

 

4).在前面讲到的子类自动转换成父类的例子中,我们的调用程序是这么写的:

 

class C{
		public static void main(String [] args){
			B b=new B();
			A a = b;
			callA(a);
			callA(new B());
		}
		public static void callA(A a){
			a.func1();
			a.func2();
		}
	}

 程序运行结果是:

B func1 is calling

B func1 is calling

B func1 is calling

B func1 is calling

 

分享到:
评论

相关推荐

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

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

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

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

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

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

    java基础继承封装多态

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

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

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

    使用C语言实现封装,继承,多态等面向对象的特性

    使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,...

    面向对象封装继承和多态.docx

    本文档总结了面向对象编程的基础知识点,包括封装、继承、多态、集合等内容。以下是对每个知识点的详细解释。 类和对象 * 类是抽象的概念,java 中面向对象编程就是面向类来编程。 * 类是具有相同属性和行为的一个...

    封装、继承、多态.docx

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

    类和对象、对象和封装、继承、多态、异常等教学...

    本教程针对初学者,详细讲解了类和对象、对象和封装、继承、多态以及异常处理等关键面向对象的知识点。 1. **类和对象**: - **类**:类是Java中的蓝图,它定义了一组具有相同属性和行为的对象。在"第一章 类和...

    java第05章.面向对象编程-2.pdf

    Java面向对象编程是Java语言的核心特性之一,它涉及多个关键概念,包括封装、继承和多态。在面向对象编程中,对象可以看作是现实世界实体的抽象表示,而类则是对象的模板。Java通过类来实现面向对象的三大特征:继承...

    da06抽象继承封装多态接口.zip

    在编程领域,面向对象编程(OOP)是设计和实现软件的一种重要方法,它强调了类、对象、继承、封装、多态等核心概念。在Flutter框架中,这些概念同样得到了广泛的应用。Flutter是一个用于构建高性能、高保真度的移动...

    .Net基础视频教程之10-面向对象多态-1.zip

    多态性是面向对象编程的三大特性之一,与封装和继承并列,是软件设计灵活性和可扩展性的关键。 在.NET框架中,多态性主要体现在两个方面:方法的多态和类型的多态。方法的多态是指子类可以重写父类的方法,从而在...

    【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip

    在Java中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更加灵活,能够处理不同类型的对象,提高代码的复用性。 在Java中,多态分为类多态和接口多态。类多态主要...

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

    Java编程语言以其强大的功能和广泛的应用而闻名,其中三大特性——封装、继承和多态是其核心概念,对于理解和编写高效、可维护的代码至关重要。 **封装**是面向对象编程的基础,它涉及到将数据(属性)和操作这些...

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

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

    Python中的面向对象的三大特征_封装、继承、多态.pdf

    Python 中的面向对象三大特征:封装、继承、多态 Python 是一门面向对象编程语言,面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将现实世界中的实体抽象化为类和对象,类是抽象的模板,对象...

    Python 101.面向对象的三大特征说明(封装、继承、多态).mp4

    Python 101.面向对象的三大特征说明(封装、继承、多态).mp4

    Java 面向对象三大特性之多态

    面向对象编程是Java的核心特性,其中封装、继承和多态是三大基石。在这个主题中,我们将专注于"多态"这一特性,它是Java编程灵活性和可扩展性的重要体现。 多态(Polymorphism)在希腊语中意为“多种形态”,在编程...

    头歌之Java面向对象 - 封装、继承和多态.rar

    第1关:什么是封装,如何使用封装 第2关:什么是继承,怎样使用继承 第3关:super关键字的使用 第4关:方法的重写与重载 第5关:抽象类 第6关:final关键字的理解与使用 第7关:接口 第8关:什么是多态,怎么使用...

    Java面向对象编程-ATm取款机系统

    - 封装是OOP的三大特性之一,它隐藏了对象内部的实现细节,只对外提供公共接口。在ATM系统中,用户的密码应该被封装,不直接暴露给外界。 3. 继承: - 继承允许一个类(子类)从另一个类(父类)继承属性和方法。...

Global site tag (gtag.js) - Google Analytics