封装
什么是封装?
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装的优点:
-
良好的封装能够减少耦合。
-
类内部的结构可以自由修改。
-
可以对成员变量进行更精确的控制。
-
隐藏信息,实现细节。
实现封装的方式:使用访问控制符
public 同类 同包 子类 不同的包
protected 同类 同包 子类
default(没有访问控制修饰符) 同类 同包
private 同类
下面展示是最简单用法:
如果你报错了,请写两个类,我的一个叫Father,一个叫Demo
package com.hp.ss;
public class Father {
private String name="";
public String getName() {
}
public void setName(String name) {
}
}
package com.hp.ss;
public class Demo {
public static void main(String[] args) {
Father f=new Father();
System.out.println(f.getName());
f.setName("张三");
System.out.println(f.getName());
}
}
输出结果:
//这里是有值的,为空字符串
张三
继承:
关键字:extends
extends 获取父类拥有的属性跟成员方法
Object是万类之祖
java中只能单继承,只有一个父类。
构造方法不能继承过来,私有的属性可以继承不能直接使用。私有的方法不能继承。
创建子类对象必须先调用父类的构造方法(默认调用父类无参数构造方法)
super()表示构造方法的时候必须放在第一行。this()表示构造方法的时候也必须放在第一行,但是切记两个不能在第一行
package com.hp.ss;
public class Father {
//这是父类
public Father(){
System.out.println("这是父类的构造方法");
}
}
package com.hp.ss;
public class Son extends Father {
//这是子类
public Son(){
//下面会打印两个父类的构造方法
super();//是因为他会默认加上这段代码,表示调用了父类的构造方法
System.out.println("这是子类的构造方法");
}
}
输出:
这是父类的构造方法
这是父类的构造方法
这是子类的构造方法
继承中有两个经常用到的东西
一个叫复写(重写)和重载,很多人区分不了这两个的差别
重写是重写父类的方法,那么也就是说两者要有继承关系,也就是说父类的方法无法满足我现有的需求,需要重写我自己想要的需求
重载是指重载子类中的方法,两者完成的功能相似,但是重载中所带的参数不一样,而重写必须参数一样。
复写
复写:关键字override
对于父类继承过来的方法重写覆盖里面的逻辑
复写具有自己的规则:
1:方法必须一样
2:参数列表必须一样
3:必须具有访问权限
4:返回类型<=父类的类型
下面该动动手了:
package com.hp.ss;
public class Father {
public void method(){
System.out.println("我是父类的成员方法");
}
}
package com.hp.ss;
public class Son extends Father {
public void method(){
System.out.println("我是子类的成员方法,我复写了父亲");
}
}
public static void main(String[] args) {
Father f=new Father();
Son s=new Son();
f.method();
s.method();
}
输出:
我是父类的成员方法
我是子类的成员方法,我复写了父亲
重载
重载的方法会有一个绿色的小箭头
重载的规则:
1.方法名必须相同
2.参数列表一定不一样
public class Son extends Father {
//属性
public int age;
//构造方法
public Son(){
//调用父类构造方法
super();
}
public void method(){
System.out.println("我是子类的成员方法,我复写了父亲");
}
public void method(int i){
System.out.println("我是子类的成员方法,我重载了上面的方法");
}
public int method(int i,int a){
System.out.println("我是子类的成员方法,我重载了上上面的方法");
age =i;
return age;
}
}
public static void main(String[] args) {
Son s=new Son();
s.method();
s.method(1);
s.method(1, 2);
System.out.println(s.age);
}
输出:
我是子类的成员方法,我复写了父亲
我是子类的成员方法,我重载了上面的方法
我是子类的成员方法,我重载了上上面的方法
1