一 包
一个java包就是一组功能相似或相关的类
- 包对于类,相当于文件夹对于文件的作用
- 通过包可以限定类的访问权限
- 通过包可以很容易对解决类重名的问题
二 封装
1 封装即隐藏功能的实现细节
- 提高代码的安全性
- 提高代码的复用性
- “高内聚”:封装细节,便于修改内部代码,提高可维护性
- “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作?
2 this关键词
this代表“当前对象”
this.属性名称 指的是访问本类中的成员变量,用来区分成员变量和局部变量(重名问题)
this的其它用法:http://c.biancheng.net/view/953.html
3 对成员变量进行读写封装
3.1 getter方法用于读取成员变量的内容。其书写格式如下
public 成员变量类型 get成员变量(){ ????????return 成员变量名; }?
注:get后的成员变量名要首字母大写,且去掉“_”?
?3.2?setter方法用于更改成员变量的内容。其书写格式如下
public void set成员变量(成员变量类型 成员变量名){ ????????tihs.成员变量名 = 成员变量名; }?
注:set后的成员变量名要首字母大写,且去掉“_”
public class Member {
private String name;
// 在idea中可以自动生成。路径是:Code - Generate - Getter and Setter
// 可以获取name的内容
public String getName() {
return name;
}
// 可以更改name的内容
public void setName(String name) {
this.name = name;
}
}
三 继承
1 继承就是子类继承父类的属性和行为
下图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有
2 示例
2.1 父类
// 创建类
public class People {
// 静态变量只能在
public static String feature;
public String name;
public void cry(){
System.out.println(name + "伤心的时候会掉眼泪");
}
protected void act(){
System.out.println(name + "两条腿走路");
}
private static void alive(){
System.out.println("People大多数情况下能活几十岁");
}
public static void main(String[] args) {
// 静态属性和方法在类实例化之前就存在,一般通过类名.属性、类名.方法名()来调用
People.feature = "一脑两眼四肢";
People.alive();
People liSan = new People();
liSan.name = "lisan";
liSan.act();
liSan.cry();
}
}
2.2 子类
// 继承使用 extends
// extends 关键字前面是子类,后边是父类
// 子类会继承父类中被(default)/protected/public修饰的成员变量和方法
public class Infant extends People {
// String类型的默认值是 null
public String name_baby;
public static void main(String[] args) {
Infant infat = new Infant();
// 直接继承了父类的name属性
infat.name = "Baby";
// 直接继承了父类的cry方法
infat.cry();
// 重写了父类的act方法
infat.act();
infat.shout();
}
// 重写了父类的act方法
public void act(){
System.out.println(name + "四条腿走路");
}
// 新写的shout方法
public void shout(){
System.out.println(name_baby + "大喊大叫");
}
}
四 多态
1 多态:是同一个行为具有多个不同表现形式或形态的能力。
2 接口
Java中实现多态最重要的就是接口。多态就是同一个接口,使用不同的实例而执行不同操作。
有时必须从几个类中派生出一个子类,这个子类需要继承所有父类的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果
实现接口的语法
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
?
?在Java中,类的多继承是不合法,但接口允许多继承,其语法如下
public interface LuoZi extends Lv, Ma
继承只能继承一个类。但implements可以实现多个接口,用逗号分开就行
class A extends B implements C,D,E
接口的方法一般为空的, 必须重写才能使用
3 接口示例
任务:根据不同的区号返回不同语言的问候语
目录如下
3.1 接口文件
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
package com.learn.test.sample.system;
public interface Language {
public void voice();
}
?3.2 实现接口功能的类
package com.learn.test.sample.system;
public class Chinese implements Language{
@Override
public void voice() {
System.out.println("你好");
}
}
package com.learn.test.sample.system;
public class English implements Language{
@Override
public void voice() {
System.out.println("hello");
}
}
3.3 对外提供功能的类(将接口文件和实现接口功能的类进行结合)?
package com.learn.test.sample.system;
public class CustomerService {
public Language contact(int areaCode){
if (areaCode == 86){
return new Chinese();
}else{
return new English();
}
}
// public static void main(String[] args) {
// Language language = new English();
// language.voice();
//
// CustomerService cs = new CustomerService();
// Language languageTest = cs.contact(86);
// languageTest.voice();
// }
}
3.4 调用接口
package com.learn.test.sample;
import com.learn.test.sample.system.CustomerService;
import com.learn.test.sample.system.Language;
public class Customer {
public static void main(String[] args) {
CustomerService customerService = new CustomerService();
// 等号前面是接口的名字,后边是接口对外提供功能的类
Language language = customerService.contact(86);
language.voice();
}
}
@Override?标签的作用
- 可以告诉读代码的人,这是对它父类方法的重写
- idea编译器可以验证@Override下面的方法名称是否是父类中所有的
|