面向对象-2

1.1语义语境拆分

小美 在朝阳公园 溜 旺财
小明 穿着 白色的 特步 运动 鞋 在奥林匹克公园跑步
赵老师 在讲台上讲 课,小刚 认真的听 课 做 笔记
张阿姨和李阿姨 在物美超市 买 红富士
把主语和宾语做成类,把形容词作为宾语的属性.
如果对象的属性作为方法参数必须把该属性所在的对象传递过来,否则不合理.

1.2逻辑思维变换

李晓 在家里开party,向朋友介绍家中的黄色的宠物狗【彩彩】
具有两条腿走路的特异功能。

人 属性:名字 行为:开party/介绍宠物
宠物 属性: 颜色/狗/名字 行为:两条腿走路

拆分主语,在后面的所有的描述中找到主语参加的活动.
主语主导的活动,主语对象是方法的调用者.
主语参与并非主导的活动,主语对象是其他对象方法的参数.

王梅家的荷兰宠物猪【笨笨】跑丢了,她哭着贴寻猪启示。

人 属性:名字 方法:贴寻猪启示
宠物 属性:名字/种类 方法:跑

富二代张三向女朋友李四介绍自己的新跑车:白色的宾利

定义一”圆”(Circle)类,
圆心为”点”(Point)类,
构造一圆,
求圆的周长和面积,
并判断某点与圆的关系

周长:2πr
面积:πrr
点和圆的关系:r*r 和 (y1-y2)^2+(x1-x2)^2

2.this

this是当前对象的引用
我们可以在类的属性前面加上this,构成 this.属性
的结构,可以把类属性和方法的参数进行区分.
如果类的属性和方法的参数不重名,可以不写this,也可以写
但是注意,this只能修饰类的属性和类的方法,不修饰参数.
alt + s —>generate constructor using fileds —> generate
↑自动生成this.属性值

3.包

有些时候,类名可能会重复
包相当于不同的文件夹,同名的类可以存放在不同的包里面
包的命名规范:
反域名法
www.baidu.com{target=”_blank” rel=”noopener”}
—?com.baidu.www
包名一般都是小写的
包里面可以存放类,不同包中可以存放相同名字的Java类
本质:
包其实就是文件夹,com.baidu.www是三层文件夹
目录层次com/baidu/www/Student.java
不同的文件夹可以存放同名的文件.

Package com.baidu.www;
//当前的类位于com.baidu.www里面;
import com.tencent.www.Student;
//导包,如果要使用的类和当前的类不位于同一个包下,此时需要导入待使用的类的包所在的包

Ctrl shift O(英文)合理的调整包(需要的包导入,不需要的移除);
多个类位于同一个包下,可以对导包进行简写:
import com.baidu.www.* 代表com.baidu.www下所有的类
注意:
*一般在超过3个类以上的时候才建议使用,否则性能低.

4.四大访问限定符

private public protected package
都可以修饰属性和方法,其中只有public和package可以修饰类.
修饰属性语法:
访问限定符 属性的类型 属性的名字;

修饰方法的语法:
访问限定符 返回值的类型 方法的名字(参数列表){
//方法体
}

PRIVATE(私有):
可以修饰方法和属性,不能修饰类.
除了在当前类里面,其他任何位置都无法访问被PRIVATE修饰的属性,也无法调用被PRIVATE修饰的方法
称为私有方法和私有属性

PROTECTED(受保护的):
可以修饰方法和属性,不能修饰类.
在当前类以及同一个包下面的其他类中可以访问,在不同包下的其他类中无法访问.可以跨包继承,只能在子类中使用
称为受保护的方法和受保护的属性.

PUBLIC(公有的):
可以修饰方法和属性以及类.
被PUBLIC修饰的属性和方法,在任何位置都可以访问

PACKAGE(默认的):
可以修饰方法和属性以及类.
效果和PROTECTED完全一致.
被称为默认的方法和默认的属性.
注意:不写修饰符代表PACKAGE.又称DEFAULT

//如果子类和父类不在同一包中,子类可以继承父类的默认成员变量,属性,但是由于权限不够,无法使用.

本类 本类 同包其他类 不同包下的类
private
protected
public
package

小c 构造方法

空心绿色圆 被public修饰的属性 空心蓝色三角 被package修饰的属性
空心红色正方形 被private修饰的属性 空心黄色菱形 被protected修饰的属性

实心绿色圆 被public修饰的方法 实心蓝色三角 被package修饰的方法
实心红色正方形 被private修饰的方法 实心黄色菱形 被protected修饰的方法

5.访问限定符的规范

一般情况下,所有的属性都必须设置为private,所有的方法都必须设置为public,构造方法也不例外

####6.访问器方法 ####
基于访问限定符的规范属性基本都是private的.
访问器方法专门针对属性赋值和获取值设计的一套方法,包含两个,一个用来设置值:

private String name;
public void setName(String name){
this.name = name;
}

一个用来获取值

public int age;
public int getAge(){
    return this.age;
}

注意:有访问器的时候一般手写一个当前类的无参构造方法

alt+shift+a 批量编辑
alt + s –>generate getter/setters

使用快捷键生成的访问器方法中,如果属性是布尔类型,无法生成getter方法,生成的是isxxx,不是getxxx.

NullPointerException
Exception in thread "main" java.lang.NullPointerException
at com.tencent.www.CourseTest04.showInfoSuper(CourseTest04.java:27)
at com.tencent.www.CourseTest04.main(CourseTest04.java:22)

空指针异常
产生的原因:使用null调用方法,或使用null.属性的方式访问属性
解决方案:只能避免.
使用if判断
当前是否为null,如果是null,什么都不做;如果不是null,再获取属性或者调用方法.