ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

面向对象的编程的学习

2022-05-21 22:32:02  阅读:134  来源: 互联网

标签:重写 构造方法 访问 子类 编程 学习 面向对象 父类 方法


1.OOP优点:

  • 可复用性
  • 可扩展性
  • 可重定位性

主要是因为面向对象具有继承封装多态 3 个核心特性。

2.创建类与访问对象:

创建类的标准格式:类名称 对象名 = new 类名称();

访问属性:对象名.属性(成员变量) 

访问成员:对象名.成员方法名() 

2.1匿名对象:

匿名对象就是没有明确的给出名字的对象,一般匿名对象只使用一次。匿名对象实际上就是个堆内存空间,对象不管是匿名的还是非匿名的,都必须在开辟堆空间之后才可以使用。具体例子,可以看Java匿名对象 (biancheng.net)

2.2访问修饰符:

信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因。在编写程序时,有些核心数据往往不希望被用户调用,需要控制这些数据的访问。

类的访问控制符只能是空或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和 friendly,其中 friendly 是一种没有定义专门的访问控制符的默认情况。

访问范围privatefriendly(默认)protectedpublic
同一个类 可访问 可访问 可访问 可访问
同一包中的其他类 不可访问 可访问 可访问 可访问
不同包中的子类 不可访问 不可访问 可访问 可访问
不同包中的非子类 不可访问 不可访问 不可访问 可访问

2.3静态变量:

定义:使用 static 修饰符修饰的属性(成员变量)称为静态变量。

访问:在类的内部,可以在任何方法内直接访问静态变量;在其他类中,可以通过类名访问该类中的静态变量。

作用:可以作为实例之间的共享数据,增加实例之间的交互性。

2.4静态方法:

定义:被 static 修饰的成员方法。

访问:在访问非静态方法时,需要通过实例对象来访问,而在访问静态方法时,可以直接访问,也可以通过类名来访问,还可以通过实例化对象来访问。

2.5静态代码块:Java static关键字(静态变量和静态方法) (biancheng.net)

2.6final关键字:

  • final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量。
  • final 用在方法的前面表示方法不可以被重写。
  • final 用在类的前面表示该类不能有子类,即该类不可以被继承。

2.7构造函数:

  • 构造函数名必须与类名相同
  • 可以有 0 个、1 个或多个参数
  • 没有任何返回值,包括 void
  • 每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数(如果成员变量没有被赋初值,则取默认值)

2.8 toString方法:

public String toString() {
        return 字符串;
}

如果一个类中定义了该方法,则在调用该类对象时,将会自动调用该类对象的 toString() 方法返回一个字符串,然后使用“System.out.println(对象名)”就可以将返回的字符串内容打印出来。

3 封装:

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

实现方式:利用private和public的访问修饰符。

4 继承(含重写,super):

一般格式:

修饰符 class class_name extends extend_class {
    // 类的主体
}

class_name 表示子类(派生类)的名称;extend_class 表示父类(基类)的名称。

4.1 继承的特点:

  • 只允许一个类直接继承另一个类,即子类只能有一个直接父类
  • 父类中的 private 成员在子类中是不可见的,父类的构造函数没有被继承。因此在子类中不能直接使用它们,但是可以在子类的构造函数中调用父类的构造函数,请看3.2.1。
  • 子类一般比父类包含更多的属性和方法
  • 子类可以有属性(或方法)与父类中的属性(或方法)同名。要调用父类的属性(或方法),请看3.2.2。
  • 重写:子类中与父类方法同名的方法,但是方法体不同,请看5.1。

4.2 super:

两种用法:

4.2.1 在子类的构造方法中显式的调用父类构造方法

必须是在子类构造方法的方法体的第一行,格式如下:

super(parameter-list); // 调用父类中的构造方法,parameter-list:父类构造方法的全部参数

如果子类没有写任何的构造方法,JVM 会生成一个默认的无参构造方法,而在这个方法中默认调用了 super()。所以如果此时父类不存在无参构造方法,就会报错。

如果父类有多个构造方法,super可以调用任意一个。

4.2.2 访问父类的成员方法和变量:

super.member

member 是父类中的属性或方法。

子类中的和父类的同名的属性可以直接赋初值。用super可以调用父类中属性的初值。

当父类和子类都具有相同的方法名时,可以使用 super 关键字访问父类的方法。

4.3 对象类型转换(向上转型)

Java 语言允许某个类型的引用变量引用子类的实例。格式如下:

fatherClass obj = new sonClass();

特点:待写

此外还有向下转型、强制对象类型转换,查看Java对象类型转换:向上转型和向下转型 (biancheng.net)

 5. 重写&重载&抽象类

5.1 重写:

定义:子类中如果创建了一个与父类中相同名称、相同返回值类型相同参数列表的方法,只是方法体中的实现不同

注意:

  • 访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)。
  • 重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。

还有几条:

  • 重写的方法可以使用 @Override 注解来标识。
  • 声明为 final 的方法不能被重写
  • 声明为 static 的方法不能被重写,但是能够再次声明
  • 构造方法不能被重写
  • 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法
  • 子类和父类不在同一个包中时,子类只能重写父类的声明为 public 和 protected 的非 final 方法
  • 如果不能继承一个方法,则不能重写这个方法

5.2 重载:

定义:同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同

注意:至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。

 为什么不能用返回值来区分方法:Java 调用方法时可以忽略方法返回值

5.3抽象类:

语法格式如下:

<abstract>class<class_name> {
    <abstract><type><method_name>(parameter-iist);
}
  • abstract 表示该类或该方法是抽象的。
  • 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
  • 抽象类不能实例化,也就是不能使用 new 关键字创建对象。
  • 抽象方法没有方法体
  • 子类重写父类时,必须重写父类所有的抽象方法,所以抽象方法不能用private修饰,不能是static的。

 6. 多态性:

含义:父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,使得同一个属性或方法在父类及其各个子类中具有不同的含义。

个人理解:就是在使用继承、重写、向上转型的过程中所表现出的性质。

多态性是指运行时多态。还有编译时多态,主要是指重载。

 

标签:重写,构造方法,访问,子类,编程,学习,面向对象,父类,方法
来源: https://www.cnblogs.com/fan-hanlin/p/16295574.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有