[JAVA]面向对象的三大特性

学习Java的进阶过程,是理解面向对象的思想,掌握面向对象的基本原则以及Java面向对象基本实现原理,熟练使用封装、继承、多态的三大特征,接下来我会带大家进一步探索Java世界的奥秘!

一、类和对象

类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。

1.定义类


[修饰符] class 类名
{
零到多个构造器定义...
零到多个field...
零到多个方法...
}


  • 定义field的语法格式:
    [修饰符] field 类型 field名[=默认值];
  • 定义方法的语法格式:
    [修饰符]方法返回值类型 方法名(形参列表)
    {
    //由零条到多条可执行性语句组成的方法体
    }
  • 定义构造器是一个特殊的方法:
    [修饰符]构造器名(形参列表)
    {
    //由零条到多条可执行性语句组成的构造器执行体
    }

值得指出的是,构造器既不能定义返回值类型,也不能使用void没有返回值定义构造器

定义一个类


class Person { // 类名称首字母大写
//定义两个Field
String name ;
int age ;
//定义一个tell方法
public void tell() { // 没有static
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}


2.对象的产生和使用

定义和使用对象


public static void main(String args[]) {
Person per = new Person() ;// 声明并实例化对象
per.name = "张三" ;//操作属性内容
per.age = 30 ;//操作属性内容
per.tell() ;//调用类中的get()方法
}


二、封装

1.什么是封装?

将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类的提供方法来实现对隐藏信息的操作和访问

  • 封装的好处
    只能通过规定的方法来实现访问

2.实现步骤

修改属性的可见性—>设为private
创建Getter/setter方法—>用于属性的读写
在getter/setter方法中加入属性控制语句—>对属性值的合法性进行判断

3. 使用 java中的包管理类

1.包的作用

  • 管理文件
  • 解决同名文件冲突

2.定义包:package 包名
3.其他文件中使用另一个文件的包通过import关键字

全部必须是小写

4.java中的访问修饰符

访问修饰符 本类 同包 子类 其他
private Y
默认 Y Y
protect Y Y Y
public Y Y Y Y

5. 内部类

内部类顾名思义就是定义在类内部的另一个类

内部类常用的几种形式分为

  • 成员内部类
  • 静态内部类
  • 方法内部类
    接下来分别讲解
    (1)内部类中最常见的就是成员内部类,也称为普通内部类。
    我们来看如下代码:

运行结果为:


从上面的代码中我们可以看到,成员内部类的使用方法
1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a
3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
4、 编译上面的程序后,会发现产生了两个 .class 文件


其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
另外,友情提示哦:
1、 外部类是不能直接使用内部类的成员和方法滴

可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如:


运行结果:


(2)静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是:
1、 静态内部类不能直接访问外部类的非静态成员,但可以通过** new 外部类().成员** 的方式访问
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();


运行结果 :

(3)方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

匿名内部类这里不做讲述,如有兴趣可以自行学习

三、继承

1.什么是继承

定义一个父类,再定义一个子类,让子类继承父类,则子类可以使用父类中定义的方法和成员。但是private属性是不能继承的。

2.方法的重写

我们经常会遇到这样的方法,子类继承了父类的方法,但是对父类方法不满意,则可以重写父类的方法,这样调用时会优先调用子类重写的方法,也就是重写过的方法

继承的初始化顺序
1.初始化父类再子类
2.先初始化对象中的属性,再执行构造方法中的初始化

3. java中final的使用

final刻意修饰类、方法、属性和变量
修饰类不允许被继承,修饰方法不允许被重写,修饰属性不允许隐式的初始化必须有值或在构造方法中赋值,修饰变量只能赋一次值变为常量

4. java中的super的使用

  • 在对象的内部使用表示父类的对象
    例:如果在子类重写了父类的方法,想调用父类的方法时 super.父类的方法名()
  • 子类的构造过程中必须调用父类的构造法方法相当于默认写了super()
  • 如果显式调用构造方法(必须运用super方法调用)必须放在构造方法第一行,也就是说super()必须放在子类构造方法的第一行
  • 如果父类有一个有参的构造法方法,子类又没有显式调用构造方法则报错

5. java中的Object类

object类式所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类继承object类
object类中的方法适合所有子类。
1.tostring()方法
返回对象式哈希code码(对象地址字符串)
2.equals()方法
比较的是对象的引用是否指向同一块内存地址
Dog dog = new Dog();
Dog dog2 = new Dog();
dog,dog2对象其实是dog指向了两个个不同的内存地址
if(dog.equals(dog2)){
System.out.println("地址值相同");
}else{System.out.println("地址值不相同");}
结果:地址值不相同

四、多态

对象的多种形态

1.引用多态

父类的引用可以指向本类的对象
父类的引用可以指向子类的对象

2.方法多态

创建本类的对象时,调用本类方法
创建子类对象时调用子类的重写方法或继承的方法

3. java 中的抽象类

就像公交车,出租车,摩托车等可以抽象出一个公共的特征是交通工具,有相同的使用方法是出行,那么类似的我们可以把许多类抽象出一个公共类,里面定义共有的成员变量以及方法,这样的类就是抽象类。定义一个抽象类,包括我们在c++中定义虚函数,这样的模块化使用不仅减少了代码的重复率,还减轻了开发人员的工作量,所以在面向对象的编程思想中,抽象类是一个很重要的运用。

  • 抽象类的定义
    abstract class Instrument {
    // 抽象类中可以有非抽象方法。
    private int i;
    public abstract void play(Note n);
    public String what() { return "Instrument"; }
    public abstract void adjust();
    }

4.java 中的接口

接口则是一个抽象类型,是抽象方法的集合,接口是为了实现不能抽象到一个类的两个有公共方法的类的方法的抽象。比如飞机和鸟,两个都具有相同的方法就是飞行,但是我们不能将飞机和鸟抽象到一个类里,那么飞机是一个类,鸟是一个类,同时我们定义一个接口,接口里抽象了飞行这个方法,则飞机和鸟两个类都可以通过调用这个接口实现飞行这个方法的实例化。

  • 定义接口
    [修饰符]interface 接口名[extends 父接口1,extends 父接口2,....]
    {
    零到多个常量定义...public static final
    零到多个抽象方法的定义...public abstract
    }
  • 继承父类实现接口的语法为:
    [修饰符]class 类名 extends 父类 implements 接口1,接口2 。。

    类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法

5.抽象类和接口的区别

要知道接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。

end.

作者有话说:
我也是一个java方向技术小白,所以文章更多的是知识点干货内容,我会往自己的理解方面更多的努力,此篇文章希望可以给予有一定的java语言基础的程序猿们更多的帮助。如果喜欢我的文章记得关注我并给我点个赞哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,099评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,607评论 0 11
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,164评论 0 5
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,198评论 0 2