龙空技术网

Java笔记四 面向对象上

皮皮萌宝李时珍的皮 51

前言:

目前兄弟们对“java 遍历类的成员属性”大体比较看重,我们都需要学习一些“java 遍历类的成员属性”的相关知识。那么小编同时在网上收集了一些关于“java 遍历类的成员属性””的相关文章,希望各位老铁们能喜欢,朋友们快快来学习一下吧!

1. 类和对象1.1 类和对象的理解类的理解类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型,类是具有相同属性和行为的一组对象的集合简单理解:类就是对现实事物的一种描述类的组成属性:指事物的特征行为:指事物能执行的操作类和对象的关系类:类是对现实生活中一类具有共同属性和行为的事物的抽象对象:是能够看得到摸的着的真实存在的实体简单理解:类是对事物的一种描述,对象则为具体存在的事物1.2 类的定义

类的组成是由属性和行为两部分组成

属性:在类中通过成员变量来体现(类中方法外的变量)行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

类的定义步骤:

①定义类

②编写类的成员变量

③编写类的成员方法

1.3 对象的使用创建对象的格式:类名 对象名 = new 类名();调用成员的格式:对象名.成员变量对象名.成员方法();1.4 学生对象-练习需求:首先定义一个学生类,然后定义一个学生测试类,在学生测试类中通过对象完成成员变量和成员方法的使用分析:成员变量:姓名,年龄…成员方法:学习,做作业…

package demo01;public class Person {    // 成员变量    String name;    int age;    // 成员方法    public void show(){        System.out.println("大家好,我是练习两年半的个人练习生蔡徐坤");    }}package demo01;public class PersonTest {    public static void main(String[] args) {        Person person = new Person();        person.name="蔡徐坤";        person.age=18;        System.out.println(person);        person.show();    }}
2. 成员变量和局部变量的区别类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)内存中位置不同:成员变量(堆内存)局部变量(栈内存)生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)3. 封装3.1 封装思想封装概述 是面向对象三大特征之一(封装,继承,多态)对象代表什么,就得封装对应的数据,并提供数据对应的行为封装代码实现 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的getXxx()/setXxx()方法3.2 private关键字

private是一个修饰符,可以用来修饰成员(成员变量,成员方法)

被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰3.3 private的使用需求:定义标准的学生类,要求name和age使用private修饰,并提供set和get方法以及便于显示数据的show方法,测试类中创建对象并使用,最终控制台输出3.4 this关键字this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

package demo02;public class Person {    // 封装    private String name;    private int age;    public String getName() {        return name;    }    // 因为局部变量和成员变量同名    // 所以需要this来进行设置     public void setName(String name) {        // this.name表示成员变量        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public void show(){        System.out.println("大家好,我是练习两年半的个人练习生蔡徐坤");    }}package demo02;public class PersonTest {    public static void main(String[] args) {        Person person = new Person();        // person.age不可以直接使用        person.setAge(18);        person.setName("蔡徐坤");        System.out.println(person.getAge());        System.out.println(person.getName());    }}
5. 构造方法5.1 构造方法概述

构造方法是一种特殊的方法

作用:创建对象 Student stu = new Student();格式:public class 类名{修饰符 类名( 参数 ) {}}功能:主要是完成对象数据的初始化5.2 构造方法的注意事项构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法 如果定义了构造方法,系统将不再提供默认的构造方法

构造方法的重载

如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

推荐的使用方式

无论是否使用,都手工书写无参数构造方法

重要功能!

可以使用带参构造,为成员变量进行初始化

示例代码

package demo03;public class Person {    private String name;    private int age;    public Person(String name, int age) {        this.name = name;        this.age = age;    }    // 没有构造函数,默认拥有    public Person() {    }    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;    }    public void show(){        System.out.println("大家好,我是练习两年半的个人练习生蔡徐坤");    }}package demo03;public class PersonTest {    public static void main(String[] args) {        Person cxk = new Person("蔡徐坤", 18);        System.out.println(cxk.getAge());        System.out.println(cxk.getName());    }}
5.3 标准类制作

① 类名需要见名知意

② 成员变量使用private修饰

③ 提供至少两个构造方法

无参构造方法带全部参数的构造方法

④ get和set方法

提供每一个成员变量对应的setXxx()/getXxx()

⑤ 如果还有其他行为,也需要写上

6 static关键字定义格式和使用

static是静态的意思。 static可以修饰成员变量或者修饰方法。

静态变量及其访问

有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。 直接用 类名访问即可。

静态成员变量在内存区域中也只存在一份

所有的对象都可以共享这个变量

定义格式

修饰符 static 数据类型 变量名 = 初始值;    

静态成员变量的访问:

**格式:类名.静态变量

静态方法及其访问

有static修饰成员方法,说明这个成员方法是属于类的,这个成员方法称为类方法或者静态方法**。 直接用 类名访问即可。因为类只有一个,所以静态方法在内存区域中也只存在一份。所有的对象都可以共享这个方法。

与静态成员变量一样,静态方法也是直接通过类名.方法名称即可访问

格式:类名.静态方法

package demo04;public class Person {    // 声明一个类变量    public static String ADDRESS = "中国";    public static String getWj() {        return "一张中国脸,一本中国护照,就是通往最安全地区的通行证";    }}
package demo04;public class PersonTest {    public static void main(String[] args) {        System.out.println(Person.ADDRESS);        Person.getWj();    }}
7 继承

假如多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可

其中,多个类可以称为子类,单独被继承的那一个类称为父类超类(superclass)或者基类

7.1继承的含义

继承描述的是事物之间的所属关系,这种关系是:is-a 的关系

继承:就是子类继承父类的属性行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为

7.2继承的好处提高代码的复用性(减少代码冗余,相同代码重复利用)使类与类之间产生了关系。7.3继承的格式

通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:

class 父类 {    ...}class 子类 extends 父类 {    ...}

需要注意:Java是单继承的,一个类只能继承一个直接父类,跟现实世界很像,但是Java中的子类是更加强大的

7.4 子类不能继承的内容

并不是父类的所有内容都可以给子类继承的:

子类不能继承父类的构造方法。

*值得注意的是子类可以继承父类的私有成员(成员变量,方法),只是子类无法直接访问而已,可以通过getter/setter方法访问父类的private成员变量。

7.5 成员变量

子父类中出现了同名的成员变量时,子类会优先访问自己对象中的成员变量。如果此时想访问父类成员变量如何解决呢?我们可以使用super关键字

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super 关键字,修饰父类成员变量,类似于之前学过的 this

需要注意的是:super代表的是父类对象的引用,this代表的是当前对象的引用

使用格式:

super.父类成员变量名
7.6 成员方法

如果子类父类中出现重名的成员方法,则创建子类对象调用该方法的时候,子类对象会优先调用自己的方法。

7.7 方法重写

方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写声明不变,重新实现

发生在子父类之间的关系 子类继承了父类的方法,父类的方法不足以满足自己的需求,子类重新写了一个与父类同名的方法,以便覆盖父类的该方 法

Override重写注解

@Override:注解,重写注解校验这个注解记的方法,就说明这个方法必须是重写父类的方法,否则编译阶段报错建议重写都加上这个注解,一方面可以提高代码的可读性,一方面可以防止重写出错

注意事项:

方法重写是发生在子父类之间的关系子类方法覆盖父类方法,必须要保证权限大于等于父类权限子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一样7.8 构造方法构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的构造方法的作用是初始化对象成员变量数据的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认有一个super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用

继承后子类构方法器特点:子类所有构造方法的第一行都会默认先调用父类的无参构造方法

子类构造方法执行的时候,都会在第一行默认先调用父类无参数构造方法一次子类构造方法的第一行都隐含了一个super()去调用父类无参数构造方法,super()可以省略不写7.9 继承的特点Java只支持单继承,不支持多继承一个类可以有多个子类可以多层继承顶层父类是Object类。所有的类默认继承Object,作为父类

package demo05;public class Person {    int age;    String  name;    String add = "father";    public Person(int age, String name) {        this.age = age;        this.name = name;    }    public Person() {    }    public void show(){        System.out.println("我会很多技能");    }    private void show2(){        System.out.println("我是私有的" );    }}
package demo05;public class Trainee extends Person{    String add = "son";    // 方法重写override重写注解    @Override    public void show() {        // 父类的show方法        super.show();        System.out.println("我会唱跳rap");        // 访问父类的成员方法        System.out.println(super.add);    }}
package demo05;public class Test {    public static void main(String[] args) {        Trainee trainee = new Trainee();        trainee.age=18;        trainee.name="蔡徐坤";        trainee.show();        System.out.println(trainee.age);        System.out.println(trainee.name);        System.out.println(trainee.add);        // trainee.show2(); 无法访问私有的方法    }}

标签: #java 遍历类的成员属性