关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)

JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了。直接从数组开始。

数组:

1.声明

int [] a;

在声明的过程中,并没有分配空间给数组。我们可以在声明的同时,用new来分配相应的空间

int [] a = new int[100];

这里开辟了一个空间为100大小的数组,内存分配也完成了。

我们可以在声明的同时也确定元素个数

int [] a = new int[]{1,3,5,7,9};

面向对象(重点)

class Human
{

int height;

void breath()

{

System.out.println("呼呼呼..");

}

}

Human类包含两个成员:一个数据成员height,另一个是方法breath()。

▲数据成员即为属性,方法即为行为。

通过对象来调用方法或者数据成员

Human person = new Human();

person.breath();

通过方法来使用对象的私有变量

class Human
{

private int height;

int getHeight()

{

return height;

}

}

主函数省略没写,如输出结果默认height为0

Human person = new Human();

person.height();

构造方法

特征:1.与类名相同

2.无返回值

class Human

{

int height;

Human(int h)

{

height=h;

}

}

使用构造器

Human person = new Human(160);  //传参

构造方法重载

class Human

{

int height;

Human(int h)

{

height=h;

}

Human(int h,String name)

{

height=h;

System.out.println("我叫"+name);

}

}

JAVA会根据你传入的参数选择构造器进行构造。

当没写构造器的时候,系统默认给你使用空构造器。

封装与接口

Java通过三个关键字来控制对象的成员的外部可见性(visibility): public, private, protected。

  • public: 该成员外部可见,即该成员为接口的一部分
  • private: 该成员外部不可见,只能用于内部使用,无法从外部访问。

(protected涉及继承的概念,放在以后说)

方法一般置为public作为接口,而重要的数据成员一般置为private。

class Human
{

private int height;

public int getHeight()

{

return height;

}

}

也就是说在外部直接使用height是错误的。必须通过调用getHeight()方法得到其值

Human person = new Human();

System.out.println(person.getHeight());

接口(interface)

以杯子为例,定义一个杯子的接口

interface Cup{

void addWater(int h);

void drinkWater(int h);

}

在interface中,我们

  • 不需要定义方法的主体
  • 不需要说明方法的可见性(接口默认为public)

我们可以在一个类的定义中实施接口,比如下面的MusicCup (可以播放音乐的杯子):

class MusicCup implements Cup

{

public void addWater(int h)

{

water = water + h;

}

public void drinkWater(int h)

{

water = water - h;

}

private int water = 0;

}

我们使用接口时,必须将接口中的所有方法都要写出,否则将会报错。

当然除了使用接口,我们在类中也可以定义其他方法。例如:

class MusicCup implements Cup

{

public void addWater(int h)

{

water = water + h;

}

public void drinkWater(int h)

{

water = water - h;

}

public int getWater()

{

return water;

}

private int water = 0;

}

实施多个接口

一个类可以实施不止一个的interface。比如我们有下面一个interface:

interface MusicPlayer{

void play();

}

将MusicCup实施两个接口

class MusicCup implements Cup,MusicPlayer

{

public void addWater(int h)

{

water = water + h;

}

public void drinkWater(int h)

{

water = water - h;

}

public void play()

{

System.out.println("lala....la");

}

private int water = 0;

}

类的继承

Human类(基类)

class Human

{

public int getHeight()

{

return height;

}

public void growHeight(int h)

{

height = height + h;

}

public void breath()

{

System.out.println("hu....hu.....hu");

}

private int height;

}

现在我们定义一个女人(Woman)类,使用继承,使用基类的基本特征,避免重复

class Woman extends Human  //此时子类具有父类的所有方法(breath().growHeight().getHeight等等)

{

public Human giveBirth()

{

System.out.println("生宝宝啦");

return (new Human(20));

}

}

加入main方法测试

class Test

{

public static void main(String [] args)

{

Woman aWoman = new Woman();

aWoman.growHeight(120);        //直接调用父类的方法

System.out.println(aWoman.getHeight());

}

}

方法覆盖

class Woman extends Human

{

public Human giveBirth()

{

System.out.println("生宝宝啦");

return (new Human(20));

}

public void breath()

{

super.breath();        //调用父类的breath()方法

System.out.println("su....");

}

}

注意,此时我们位于衍生层,依然可以通过super来调用基类对象的breath()方法。当我们外部调用Woman类时,由于方法覆盖,就无法再调用基类对象的该方法了。

构造方法继承之后

在了解了基类对象和衍生层的概念之后,衍生类的构造方法也比较容易理解。

我们要在衍生类的定义中定义与类同名的构造方法。在该构造方法中:

  • 由于在创建衍生对象的时候,基类对象先被创建和初始化,所以,基类的构造方法应该先被调用。我们可以使用super(argument list)的语句,来调用基类的构造方法。
  • 基类对象创建之后,开始构建衍生层 (初始化衍生层成员)。这和一般的构建方法相同,参考构造方法与方法重载

class Human

{

public Human(int h)

{

height = h;

}

private int height;

}

class Woman extends Human

{

public Woman(int h)

{

super(h);

System.out.println("我们让父类中的height初始化");

}

}

关于static

类的所有对象共享“人口”数据。这样的数据被称为类数据成员(class field)。

在类定义中,我们利用static关键字,来声明类数据成员,比如:

class Human

{

private static int population;

private static boolean is_mammal = true;

}

我们定义了两个类数据成员: population和is_mammal。所有Human对象都共享一个population数据;任意Human对象的is_mammal(是哺乳动物)的属性都为true。

类数据成员同样要设置访问权限。对于声明为public的类数据成员,可以利用class.field的方式或者object.field(如果存在该类的对象)的方式从外部直接访问。这两种访问方式都是合理的,因为类数据成员可以被认为是类的属性,可以认为是所有成员共享的属性。如果类数据成员被定义为private,那么该类数据成员只能从类的内部访问。

(上面将is_mammal设置成了public,只是为了演示。这样做是挺危险的,万一有人使用 Human.is_mammal=false;,所有人类都遭殃。还是那个基本原则,要尽量将数据设置为private。)

static方法

我们也可以有类方法,也就是声明为static的方法。类方法代表了类可以实现的动作,其中的操作不涉及某个具体对象。如果一个方法声明为static,那么它只能调用static的数据和方法,而不能调用非static的数据和方法。

下面我们增加一个static方法getPopulation(),该方法返回static数据population:

class Human

{

private static int population;

private static boolean is_mammal = true;

public static int getPopulation()

{

return population;                      //类方法只能访问类数据成员

}

}

两种方法调用类方法。类名.方法 或者 对象.方法

class Test

{

public static void main(String [] args)

{

System.out.println(Human.getPopulation());      //直接是 类名.方法

Human person = new Human();

System.out.println(person.getPopulation());      //对象.方法

}

}

final定义

final关键字的基本含义是: 这个数据/方法/类不能被改变了。

  • final基本类型的数据: 定值 (constant value),只能赋值一次,不能再被修改。
  • final方法: 该方法不能被覆盖。private的方法默认为final的方法。
  • final类: 该类不能被继承。

普通类型的对象也可以有final关键字,它表示对象引用(reference)不能再被修改。即该引用只能指向一个对象。但是,对象的内容可以改变 (类似于C中的static指针)。我们将在以后介绍对象引用。

如果一个基本类型的数据既为final,也是static,那么它是只存储了一份的定值。这非常适合于存储一些常量,比如圆周率。

interface继承

在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。

在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。interface接口同样可以继承,以拓展原interface。

接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型。比如,我们以Cup作为原interface:

interface Cup{

void addWater(int w);

void drinkWater(int w);

}

我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup

interface MetricCup extends Cup

{

void getWater();           //返回水量

}

interfacede的多重继承

在Java类的继承中,一个衍生类只能有一个基类。也就是说,一个类不能同时继承多于一个的类。在Java中,interface可以同时继承多于一个interface,这叫做多重继承(multiple inheritance)。

比如我们下面有一个player接口

interface Player{

void play();

}

我们新增一个MusicCup的接口。它既有Cup接口,又有Player接口,并增加一个display()方法原型。

interface MusicCup extends Player,Cup

{

void display();

}

抽象类

在生活中,我们会有一些很抽象的概念。这些抽象的概念往往是许多类的集合,比如:

  • 粮食 (可以是玉米、小麦、大米)
  • 图形 (可以是三角形、圆形、正方形)

再比如,我们之前举出了例子:

  • 人类 (可以是男人、女人)

抽象到具象必须完善抽象类中的方法,否则该类还是抽象类

abstract class Food

{

public abstract void eat();

public void happyFood()

{

System.out.println("好好吃");

}

}

类中的方法可以声明为abstract,比如上面的eat()。这时,我们不需要具体定义方法,只需要提供该方法的原型。这与接口类似。当我们在比如Corn类中继承该类时,需要提供eat()方法的具体定义。

类中的另一个方法happyFood()并不是

当一个类中出现abstract方法时,这个类的声明必须加上abstract关键字,否则Java将报错。一个abstract类不能用于创建对象。

所有内容来自于

作者:Vamei 出处:http://www.cnblogs.com/vamei

笔记整理:Ten10

				
时间: 2024-08-04 03:18:42

关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)的相关文章

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

【Java面向对象基础(一)】数据类型与运算符

[喵"的Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数据类型 字节数 二进制位数 最小值 最大值 默认值 byte 1 8-bit -2^7 +2^7 - 1 0 short 2 16-bit -2^15 +2^15 - 1 0 int 4 32-bit -2^31 +2^31 - 1 0 long 8 64-bit -2^63 +2^63 - 1 0

【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

[喵"的Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: 1 // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a 2 String a = new String("Hello&

JAVA面向对象基础问答

请简要写出搭建java开发环境的步骤和java跨平台原理. 答: 搭建开发环境步骤:1.下载安装JDK.2.配置path路径.  Java跨平台原理:java针对不同平台开发了不同版本的JVM,不同平台安装上对应版本的JVM之后  使用java代码编写的程序通过一次编译生成统一的字节码文件,就可以在JVM虚拟机中运行  所以只需开发一套使用java代码编写的程序,就可以在不同平台上进行运行,这就是java跨平台原理. int和Integer都可以代表一个整数,这两者在使用上有什么区别吗?为什么J

java面向对象基础知识

一.面向对象与面向过程的区别: ①所处的角色不同:前者指挥者,后者执行者:②所需知道的事情不同:前者知道哪些是做这些事情的人就可以,不需了解具体的事情操作的过程.后者需要具备应有的技能来做这些事情. 二.面向对象的基本操作过程 指挥者采用面向对象思想,通过创建类,来创建统一的属性值[成员属性]和(做事的)方法[成员方法]. 通过创建的类或者jdk已有的类,来创建具体的对象,属性值明确,方法明确. 举例:创建类 1 package com.oracle.demo02; 2 3 public cla

java面向对象基础

思想 面向过程:是分析出解决问题所需的步骤,从上往下步步求精,自顶向下的编程,最重要的是模块化思想,考虑实际的实现 优点:性能高 面向对象:以事物为中心,将事物高度抽象为对象,对象包括属性与行为. 优点:易重用.易扩展.易维护.适合大型项目 联系与区别 联系:面向对象也含有面向过程的思想 区别:面向过程是一件事"该怎么做",面向对象是一件事"该让谁来做" 举例 汽车发动  汽车到站 面向过程  汽车发动与汽车到站分别为两个事件,形成两个函数,依次调用 面向对象  关

java面向对象基础复习

this关键字用法: 表示当前对象的引用,即调用成员属性和方法时,表示当前正在调用的对象 调用其他构造方法(必须放在第一行): super关键字 指向自己(直接)父类对象的一个指针,可以调用父类的成员属性和方法 调用父类中的某一个构造函数 面向对象三大特征: 继承 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. 子类拥有父类非private的属性和方法 JAVA不支持多继承,继承关系是传递的 父类是子类的一般化,子类是父类的特殊化(具体化) 封装 属性描述

Java 面向对象基础

面向对象的基础 局部变量和成员变量区别: 1)定义的位置不同    成员变量直接定义在class中    局部变量在某个{}中或者再某个方法中 2)在内存中的位置不同    对象的成员变量会在内存中的堆内出现    局部变量只能出现在栈内存中 3)生命周期不同    成员变量因为会进入对内存,所以程序结束前不会消失    局部变量因为方法执行完毕之后弹栈,所以会随着弹栈消失 4)初始值不同    成员变量因为会保存在堆内存中,所以会有初始值    局部变量只能赋值之后才能使用! 原文地址:htt

14. java面向对象 - 基础

一.面向对象主线 1. Java类及类的成员:属性.方法.构造器.代码块.内部类 2. 面向对象三大特征:封装.继承.多态.(抽象性) 3. 其他关键字:this.super.static.final.abstract.interface.package.import class Person{ //属性,或成员变量 String name; boolean isMarried; //构造器 public Person(){} public Person(String n, boolean im