本周学习了面向对象,主要有抽象数据类型、对象的构造和初始化、包的使用、访问修饰符、封装、继承和多态。
面向对象:
对象:在面向对象的世界中万事万物皆对象。能看得见摸得着的任何物体都是对象,例如猫、狗、鸭子等。
类:具有相同的状态和相同的行为的一组对象的集合。例如有学号、有姓名的状态,有听课、有做作业的行为的所有对象可以归纳为一类。
类和对象的关系:类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。
定义类:
类的字段:
类的内部包括字段和方法,对象所拥有的特征在类中表示时称为类的字段,字段使用变量表示。
类的方法:
对象执行操作的行为称为类的方法。
创建对象:
类是一类事物的集合和抽象,代表着这类事务共有的字段和行为。一个对象称为类的一个实例,是类一次实例化的结果。
使用对象:
成员变量:在类中(方法外)声明的变量,在创建对象时会进行初始化
实例变量:每个对象的实例变量不共享
引用对象的字段和方法,需要使用成员运算符“.”
成员变量的作用域:
直接定义在类的内部、方法的外部的变量称为成员变量。
成员变量的作用域是整个类。
显式成员初始化:
package method;
public class Person { //定义person类
private int x=5;
private String name="喵星人";
private double weight=45.8;
}
<p>局部变量的作用域:</p>
<p>局部变量就是定义在方法内部的变量。局部变量只能在方法内部使用。</p>
<p>局部变量在使用之前必须初始化,否则编译出错。</p>
<p>构造方法的定义:</p>
<p>构造方法的作用是为成员变量的初始化。</p>
<blockquote>
<p>[访问修饰符] 方法名([参数列表]){</p>
<p>//省略方法体的代码</p>
<p>}</p>
</blockquote>
<p>默认的构造方法:</p>
<p>每个类都必须至少有一个构造方法。</p>
<p>默认构造方法的参数列表及方法体均为空。</p>
<p>构造方法不能继承。</p>
<p>方法重载:</p>
<p>方法重载是指在一个类中,定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数或参数顺序。</p>
<p>“`java
package method;
public class Person { //定义person类
public String name;
public String gender;
public int age;
//第一次重载
public void work(){
System.out.println(this.name+”的工作理念:工作让生活更美好”);
}
//第二次重载
public void work(String content){
System.out.println(this.name+”的工作理念:”+content);
}
}
包的概述:
包是类的容器,利用包来划分名字空间,用于分隔类名空间,以避免类名冲突。
作用:
(1)存放类。
(2)防止命名冲突。Java中只有在不同的包中的类才可以同名。
(3)包允许在更广的范围内保护类、方法和数据,包外的代码有可能不能访问该类。
包的定义:
- 包的声明必须是Java源文件中的第一条非注释行语句,而且一个源文件只能只能有一个包声明语句。
- 一个唯一的包名前缀通常是全部小写的ASCⅡ码,并且是一个顶级域名com、edu、gov、net、org,通常使用域名的倒序。例如kaifamiao.com,声明包时为com.kaifamiao。
- 定义包后,Java会在硬盘生成与之一一对应的目录。
包的使用:
- 包不能以java、javax开头
- 导入包是声明当前类要使用到的其他类的包
- 使用非同包下的类必须先导包或者使用全限定类名
- 同包下的类不需要导包
- java.lang包下的类不需要导包
类和类的访问控制:
包实际上是一种访问控制机制,通过包来限制和制约类之间的访问关系。
Java中的封装是通过访问修饰符实现的。访问修饰符有三个(4种),分别是public、protected、package-access、private。
static关键字:
使用static修饰的属性称为静态属性或者类变量,没有使用static修饰的属性称为实例变量。使用static修饰的属性属于类。类属性在类首次被加载时初始化。
```mysql
package method;
public class Person { //定义person类
public static int person_live;//类变量
<pre><code>public static void main(String[] args) {
Person.person_live=1;
System.out.println(Person.person_live);
}
</code></pre>
}
</code></pre>
<p>封装概述:
封装的实质就是将类的<a href="https://so.csdn.net/so/search?q=成员变量&spm=1001.2101.3001.7020">成员变量</a>、方法等隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。可以使用访问修饰符来控制类中的数据和方法的访问级别,从而实现包装。
封装的步骤:
1.修改字段的可见性
2.设置getter/setter方法
3.设置字段的存取权限
封装的意义:
主要目的是隐藏类的内部实现细节,防止外部直接访问类的内部数据和方法,从而保证类的安全性和稳定性。
遮蔽:
在一个作用域中使用了一个和外部作用域相同的变量名,导致内部变量“遮蔽”了外部变量,既无法直接访问外部变量。
this:
this关键字代表当前对象,通常用于区分方法中的局部变量和成员变量。
```java
package method;
public class Person { //定义person类
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
继承:
继承中可以解决编程中代码冗余的问题,新类可以在不增加自身代码的情况下,通过从现有类中将继承其属性和方法,来实现充实自身内容,这种现象或行为就称为继承。新类称为子类,现有类称为父类。
继承的应用:
```java
package method;
//定义一个父类
public class Person { //定义person类
protected int age;
protected String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
public Person(){}
public void printInfo(){
System.out.println("name:"+name);
System.out.println("age:"+age);
}
}
使用super关键字调用父类成员:
当需要在子类中调用父类的构造方法时,可以使用super关键字调用。super用在子类中,访问直接父类中被隐藏的内容。super关键字不仅可以访问父类的构造方法,还可以访问父类的成员、父类的普通方法等。
方法重写:
如果从父类中继承的方法不能满足子类的需求,可以在子类中对父类同名方法进行重写(覆盖),以符合子类的需求。
方法隐藏:
父类和子类拥有相同名字的属性或方法时,父类的同名的属性或方法形式上不见了,实际还是存在的。(方法隐藏只有一种形式,就是父类和子类存在签名相同的静态方法)。
Object类:
Object类是所有类的父类。所有的Java类都直接或间接的继承了java.lang.Object类。在定义一个类时,没有使用extends关键字,也就是没有显式的继承某个类,那么这个类直接继承Object类。
String toString()
返回当前对象本身的有关信息,返回字符串对象
boolean equals(Object)
比较两个对象是否是同一个对象,若是,返回true
Object clone()
生成当前对象的一个副本,并返回
Class getClass()
获取类结构信息,返回class对象
int hashCode()
返回对象的哈希码值
二、感受
就是很累,上课听的很艰难,开学到现在还没有过这种感觉,上课老是听不懂,气的想打人。。。不过每天也在努力听懂,放两天假本来打算好好补一下,结果刚到教室肚子疼,躺了一天半。。。呜呜呜越落越多。
三、问题
最大的问题:宿舍空调坏了!教室热宿舍还热!学习上的,太多了。。。。。。无法用语言表达。
powered by kaifamiao