JAVA类和对象创建

Wesley13
• 阅读 573

JAVA类和对象创建

  面向对象

  学习目标:

  理解面向对象的编程思想

  理解类与对象的关系

  如何创建类与对象

  方法重载

  一:什么是面向对象编程(OOP)

  面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种编程思想,它将对象作为问解决问题的基本元素, 利用对象和对象之间的相互作用来设计程序。

  面向对象思想把整个世界看成由各种对象来组成的。这些对象具有属性和行为(方法)。

  面向对象思考问题的方式:

  1.首先考虑在问题域中设计到的对象有哪些

  2.其次考虑这些对象有怎样的特征和功能

  3.最后考虑对象和对象之间的关系

  二、类与对象

  1.对象:用来描述客观事物的一个实体,由一组属性和行为构成

  2.类:类是一个模板,它描述一类对象的行为和状态

  对象的特征-属性:属性是对象具有的各种特征

  对象的行为-方法:行为是对象执行的各种操作

  对象:用来描述客观事物的一个实体,由一组属性和行为构成

  类: 类是模子,定义对象将会拥有的特征(属性)和行为(方法)

  类与对象的关系

  类是抽象的概念,仅仅是模板

  比如说:“人”

  对象是一个你能够看得到、摸得着的具体实体、也称为类的实例(instance)

  三、类与对象的创建

  定义类的语法:

  [访问修饰符] class 类名 {

  //这里放属性和方法的声明

  }

  类中成员变量的定义

  定义成员变量的语法:

  [访问修饰符] 数据类型 成员变量名 [= 初始值];

  成员变量的类型可以使用Java语言中的任何一种数据类型(包括基本类型和引用类型)。

  在定义成员变量时可以对其进行初始化。如果不对其初始化,Java会使用默认的值对其进行初始化。

  成员变量的作用域是整个类体。

  回顾-局部变量和成员变量

  定义位置:成员变量直接在类中定义;局部变量定义在方法中。

  声明赋值:成员变量可以在声明时赋初始值;若不赋值,会有默认初始值,引用类型的值为null;局部变量在使用前需要赋值。

  作用域:成员变量在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用;局部变量仅限于定义它的方法,在该方法外无法访问它。

  注意:

  1.在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量

  2.局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级

  类中方法的定义

  定义方法的语法:

  [访问修饰符] 返回值类型 方法名 (参数类型 参数名1,…){

  // 这里放方法的具体实现语句

  }

  对象的产生和使用

  怎么根据设计好的类来创建一个对象?

  利用new关键词调用类的构造方法(类的一种特殊方法)就可创建该类的一个对象。

  构造方法

  构造方法的名字和类名相同,并且没有返回值,并且不要加void。

  构造方法的作用在于构造并初始化对象。

  每个类中都至少包含一个构造方法。

  两种构造方法

  默认构造方法

  带参构造方法

  默认构造方法

  默认构造方法就是指不带参数的构造方法。

  Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个默认的无参构造方法。

  如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认构造方法

  四、方法重载

  重载(Overloading)

  public class Player

  {

  public void play(歌曲){ //演唱歌曲}

  public void play(钢琴){ //弹奏钢琴}

  public void play(剧本){ //根据剧本表演}

  }

  方法重载:同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同)

  学习目标

  1.this关键字

  2.static关键字

  3.封装性

  4.继承性

  5.super关键字

  6.四种访问权限

  7.方法重写

  一:This关键字

  每个类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象(当前对象)。

  当在方法中使用本类的非static属性时,都会隐含地使用this名称。

  this可以看作是一个变量,它的值就是当前对象的引用

  this关键字-用法一:

  当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量

  this关键字-用法二:

  如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用本类中的其他构造方法。

  二:static关键字

  在类中,用static声明的成员变量为静态成员变量,它是该类的公用变量,对于该类的所有对象来说,static成员变量只有一份。

  用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法。

  静态方法中只能直接调用本类中其他的静态成员(变量和方法)。

  静态方法中不能使用this和super关键字。

  静态成员可以通过类名(不需要实例化)或类的实例去访问。

  static静态代码块:

  在类中可以使用不包含在任何方法中的静态代码块(static block),当类被JVM载入时,静态代码块被执行,且只被执行一次。

  静态代码块经常用来初始化类的静态成员变量。

  static{

  // 静态代码块内容

  }

  三:封装性

  封装(Encapsulation)

  对外部不可见,隐藏对象的属性和实现细节。

  封装的好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。

  继承(extends)

  代码的重用

  扩展类的功能

  多态(Polymorphism)

  对象的多态性

  封装性体现

  类的封装(属性、方法都存在于某个类中)

  对字段的封装

  1字段设置为私有(private)

  2添加get /set 方法

  访问修饰符的限制,保证数据的安全

  单例设计模式(重要)

  1.私有化构造方法

  在类的内部实例化该类的对象,

  该类的对象必须是static全局变量。

  编写获取该单例对象的static方法。

  “饿汉式”单例模式:当类加载到JVM时,单例对象直接创建;

  “懒汉式”单例模式:当类加载到JVM时,并不直接创建单例对象,用户请求单例对象时(用户需要使用时),才实例化该单例对象;

  四:继承性

  什么是继承:

  继承是一个类继承另一个类.这个类拥有父类可以被继承的成员。

  继承是面向对象特征之一。

  实现继承的类称为子类也叫派生类,而被继承的类称为父类,也叫超类或基类。

  类的方法和属性可以被继承。

  私有的属性和方法不能被继承。

  构造方法不能被继承。

  继承的好处:实现代码的重用和扩展,模拟现实世界的关系,结构更清晰

  继承具有传递性

  单继承性:

  1.在java中一个类只能有一个父类,这就是Java的“单继承性”。

  2.java.lang.Object类是所有类的父类。

  使用继承

  要继承一个类,可以使用extends关键字,意味着扩展父类的功能。

  类继承的基本语法:

  class[extends] {

  *

  }

  五:super关键字

  在Java类中使用super来引用父类的成员

  super可用于访问父类中定义的属性

  super可用于调用父类中定义的成员方法

  super(…)可用于在子类构造方法中调用父类的构造方法

  super关键字-示例1:

  使用super调用基类的属性

  class Father{

  public int value=200;

  }

  class Child extends Father{

  public int value;

  public void print(){

  value=100;

  super.value=50;

  System.out.println(“value的值”+value);

  System.out.println(“super.value的值”+super.value);

  }

  }

  super调用父类构造方法

  创建子类对象会先调用基类的构造方法,默认调用基类无参构造方法,

  要调用基类其他带参构造方法,则使用super

  super关键字-示例2:

  使用super调用基类中构造方法:

  Class Father{

  private int n;

  public Father(){

  System.out.println(“父类无参构造”);

  }

  public Father(int n){

  this.n=n;

  System.out.println(“父类中带参构造”+n);

  }

  }

  class Child extends Father{

  private int n;

  public Child(){

  super(300);

  System.out.println(“子类无参构造”);

  }

  public Child(int n){

  this.n=n;

  System.out.println(“子类带参构造”+n);

  }

  }

  使用super关键字注意事项:

  1 当子类和父类都有同名的属性时,在子类中如果要使用父类的属性 super.属性

  2 super只能应用在成员方法和构造方法中,不能应用在静态方法中(和this是一样的)

  3 如果在构造方法中使用必须放在第一行

  4 在构造方法中this()和super()不能同时出现

  常见错误

  class Father{

  String name;

  public Father(String name){

  this.name=name;

  }

  }

  class Child extends Father{

  public Child(){

  }

  public Child(String name){

  super(name);

  }

  }

  子类构造方法中没有super(),则调用父类无参构造,而父类中没有无参构造,编译错误

  六:四种访问权限

  对类中的属性和方法的可见度

  访问修饰符

  private

  protected

  public

  访问权限

  类的访问修饰符

  public:任何包中的类都可以访问该类

  默认值:同一个包中的类可以访问该类

  成员的访问修饰符

  private:只对本身类可见

  默认值:对同一包中的类可见

  protected:对跨包的子类和同一包中的类可见

  public:对一切类可见

  注意:访问成员的前提是首先能访问成员所属的类

  在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。

  注意: default,public也可以用来修饰一个类,但是protected不能修饰一个类

  七:方法重写(override)

  当子类继承父类时,可以从父类继承它的属性和方法,如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫做方法的重写(override)

  重写规则

  重写的注意事项(三要素):

  只能存在于子类和父类之间

  子类的方法名称、输入参数和返回值类型完全一致或子类方法返回值类型是父类方法返回值类型的子类。

  权限不能比父类方法更加严格。

  注意:重写的前提是先继承了父类的方法。

  方法的重写-示例:

  class Person{

  private String name;

  private int age;

  //省略字段封装方法

  public String getInfo(){

  return “名字:”+name+”年龄:”+age;

  }

  }

  class Student extends Person{

  private String school;

  //省略字段封装方法

  public String getInfo(){

  return “名字:”+getName()+”年龄:”+getAge()+”学校:”+school;

  }

  }

  class Test{

  public static void main(String[] args){

  Student stu=new Student();

  stu.setName(“小明”);

  stu.setAge(20);

  stu.setSchool(“×××”);

  Person p=new Person();

  p.setName(“小强”);

  p.setAge(1000);

  System.out.println(stu.getInfo());

  System.out.println(p.getInfo());

  }

  }

  方法重写注意事项

  (1)在JDK1.5之后,重写方法的返回值类型可以和父类中的方法返回值类型兼容 (引用类型之间)

  (2)如果子类中成员变量、静态变量、静态方法 和父类中成员变量、静态变量、静态方法相同,这种情况不是重写,可以认为是隐藏,只有非static成员方法之间才是重写

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
半臻 半臻
2年前
Python基础6——面向对象
14面向对象14.1面向对象基础​面向对象是一种编程思想,处理面向对象编程以外,还有面向过程编程​三大特征:1.封装2.继承3.多态​面向过程与面向对象的区别1.面向过程:自己动手洗衣服,拧衣服、晾衣服2.面向对象:构造一个洗衣机对象,让洗衣机对象完成14.2类和对象​类:相同属性和功能的一类事物。​人是一个类,张三(
Wesley13 Wesley13
2年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
Wesley13 Wesley13
2年前
java常用类(2)
三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
菜园前端 菜园前端
1年前
什么是面向对象编程?
原文链接:什么是面向对象编程?面向对象程序设计(ObjectOrientedProgramming,OOP)是一种计算机编程架构,也可以理解为是一种编程的思想。面向对象程序设计的核心就是对象和类,对象也是类的实例化,类是对现实对象的抽象。对象间通过消息传递
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
小万哥 小万哥
2个月前
深入解析 Java 面向对象编程与类属性应用
Java面向对象编程面向对象编程(OOP)是一种编程范式,它将程序组织成对象。对象包含数据和操作数据的方法。OOP的优势:更快、更易于执行提供清晰的结构代码更易于维护、修改和调试提高代码重用性减少开发时间类和对象类是对象的模板,它定义了对象的属性和方法。对