java面向对象特征

java面向对象的特征:封装,继承,抽象,多态;

--1--.封装:

什么叫做封装?

封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

来个荔枝:

public class Man {
    //对属性的封装,一个男人有姓名,年龄,妻子这些都属于私有属性
    private String name;
    private int age;
    private Woman wife;

    //对方法的封装
    //该人对外界提供的方法封装,可以设定妻子,姓名,年龄,也可以获取他的姓名和年龄(妻子就不能随意获取了)
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setWife(Woman wife) {
        this.wife = wife;
    }
}
public class Woman {
    //对属性的封装,一个女人有姓名,年龄,妻子这些都属于私有属性
    private String name;
    private int age;
    private Man husband;
    //对方法的封装
    //该人对外界提供的方法封装,可以设定丈夫,姓名,年龄,也可以获取他的姓名,年龄(丈夫也不能随意获取)
    public void setHusband(Man husband) {
        this.husband = husband;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

这样就可以知道封装可以将对象的一些属性私有化,提供一些可以被外界访问的方法;但是如果有对象有不想让外界访问的属性时不提供相应的方法即可,就如这里的Man的wife属性和Woman的husband属性不提供get方法;

接下来用另外一个荔枝来解释另一个好处:

对方法的封装:

public class Show {
    public static void show(String str){
        System.out.println(str);
    }
}
public class User {
    public static void main(String[] args){
        Show.show("封装");
    }
}

对方法进行封装后就不需要去写:

  System.out.println(str);直接调用Show.show();方法即可;

封装的作用:

1.对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。

2.对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

--2--继承

什么是继承?

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

一些基本特征:

(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,什么是继承?还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于    安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

--3.抽象--

什么是抽象?

用了关键词abstract声明的类叫作"抽象类"。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。"抽象方法",属于一种不完整的方法,只含有一个声明,没有方法主体(语法:abstract
void f();)。

如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。

如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。

即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

这里我们有不得不谈到抽象和接口的区别:

什么是接口?

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

两种含义:一,Java接口,java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做"Java接口",后者叫做"接口"。

接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

在语法上,抽象类和接口有着以下不同:

1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。例:

public class Main extends JApplet

public class Main implements Runnable

public class Main extends JApplet implements ActionListener

public class Main extends JApplet implements ActionListener, Runnable

2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract
class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public
static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认具有
friendly权限,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是
public abstract 类型的。

--4.多态--

什么是多态?

意义:

1.同一类型的引用指向不同的对象时有不同的实现

---行为多态:cut()方法:对于理发师为剪头发;对于厨师是切菜;对于伐木工是砍树;

2.同一个对象被造型为不同的类型时有不同的功能

---对象的多态:person对象:对于父母是孩子;对于老师是学生;对于孩子是父母

向上造型:

1.父类引用指向子类对象;

2.能造型成的类型:父类以及实现的接口;

class A{
  public method(){
     ......
   }
}
class A1 extends A {
  public method(){
     ......
   }
}
class A2 extends A{
  public method(){
     ......
   }
}

A a=new A1(); 出现多态了,对象的引用指向了他子类A1的new出来的对象  ,method方法的指针已经指向A1的method,当他调用method方法时候,调的就是A1的方法

a.method(); 调用A1的method方法

A a=new A2(); 出现多态了,对象的引用指向了他子类A2的new出来的对象  ,method方法的指针已经指向A2的method,当他调用method方法时候,调的就是A2的方法

a.method(); 调用A2的method方法

时间: 2024-07-28 13:26:45

java面向对象特征的相关文章

java面向对象编程(七)--四大特征之多态

1.多态概念 多态性是对象多种表现形式的体现.比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等.那么我到宠物店说"请给我一只宠物",服务员给我小猫.小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性. java中的多态,就是指一个引用(类型)在不同情况下的多种状态.也可以理解成,多态是指通过指向父类的指针,来调用在不同子类中实现的方法.也可以理解为"一个接口,多个方法". 实现多态有两种

java面向对象编程(六)--四大特征之继承、方法重载和方法覆盖

一.继承 1.继承的概念 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends语句来声明继承父类.语法如下: class 子类 extends 父类 这样,子类就会自动拥有父类定义的某些属性和方法.另外,并不是父类的所有属性.方法都可以被子类继承.父类的public修饰符的属性和方法,protected修饰符的属性和方法,默认修饰符属

Java面向对象的三大特征

Java面向对象的三大特征: 封装.继承.多态 封装和继承几乎都是为多态而准备的 一.      封装 首先,属性能够描述事物的特征,方法能够描述事物的动作.封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用. 封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系.也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行.

java面向对象编程(五)--四大特征之抽象、封装

1.抽象 我们在前面去定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模版).这种研究问题的方法称为抽象. 2.封装 封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作. java中实现封装的方法: 案例:不能随便查看人的年龄,工资等隐私[Demo116.java] //封装案例[Demo116.java] public class Demo116{ public static

比较分析C++、Java、Python、R语言的面向对象特征,这些特征如何实现的?有什么相同点?

一门课的课后题答案,在这里备份一下: 面向对象程序设计语言 –  比较分析C++.Java.Python.R语言的面向对象特征,这些特征如何实现的?有什么相同点? C++ 语言的面向对象特征: 对象模型:封装 (1)  访问控制机制: C++提供完善的访问控制机制,分别是: public,protected和private. private, public, protected 访问标号的访问范围 public 可访问 1.该类中的函数 : 2.子类的函数: 3.其友元函数访问:4.该类的对象访

Java 面向对象的三大特征

面向对象主要由三大特性: 封装 继承 多态 一.封装 1.封装的概念 封装性是面向对象编程的核心思想 指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体 封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性. 2.封装的好处 只能通过规定方法访问数据 隐藏类数实现细节 方便修改实现 方便加入控制语句 3.封装的使用 1).修改属性的可见性   ——> 设为private 2).创建共有的 get

Java面向对象的三大特征和五大原则

Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别. 封装目的:增强数据安全性,不能让其他用户随意访问和修改数据,和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员. 继承 继承(Extend)是指将多个相同的属性和方法提取出来,新建一个父类Java中一个类只能继承一个父类,且只能继承访问权限非private的属性和方法

Java面向对象编程三大特征 - 封装

Java面向对象编程三大特征 - 封装 本文关键字:Java.面向对象.三大特征.封装封装是面向对象编程中的三大特征之一,在对封装性进行解释时我们有必要先了解一些面向对象的思想,以及相关的概念.当我们想要去描述一系列的关系时我们要用到的最基本结构就是类,其中存在着成员变量和方法,用于记录属性和表达行为,相关知识请进传送门:Java中的基本操作单元 - 类和对象. 一.名词解读 为了解释封装的概念和作用,需要先来了解一下几个相关的概念,这有助于我们接下来的理解. 1. 权限修饰符 当我们在一个类中

Java面向对象编程三大特征 - 多态

Java面向对象编程三大特征 - 多态 本文关键字:Java.面向对象.三大特征.多态多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一.在理解多态之前需要先掌握继承.重写.父类引用指向子类对象的相关概念,对继承还没有完全明白的同学可进传送门:Java面向对象编程三大特征 - 继承. 一.抽象类 在继承中,我们已经了解了子父类的关系以及如何对子父类进行设计,如果已经存在多个实体类,再去定义父类其实是不断的抽取公共重合部分的过程,如果有需要将会产生多重继承关系.在抽取整理的过程中,除了