封装
顾名思义,就是将数据封装起来,提高数据的安全性。我们程序都是要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉,低耦合;仅暴露少量的方法给外部使用。
封装的关键字是 private。例如:
public class Tao{
private int age;
}
public static void main(String[] args){
Tao a=new Tao();
a.age//这里是直接报错的
}
a.name报错原因就是属性已经被私有化,外部无法直接使用。如果要操作私有化属性的话,就可以创建一个set,get方法。相当有给外部提供一个接口。
public class Tao{
private int age;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
public static void main(String[] args){
Tao a=new Tao();
a.setAge(18);
}
由上可以看到,我们就可以通过一个set的方法进行赋值,get方法就是取值。
为了数据的一些有效性,我们可以在set方法里面进行一些数据验证
public class Tao{
private int age;
public void setAge(int age){
if(age>0&&age<110){
this.age=age;
}else{
this.age=18;
}
}
public int getAge(){
return this.age;
}
}
上面可以看到,我对年龄进行了一个验证,传入的年龄值只能小于110岁和必须大于0岁,否则的话,我就给了一个默认值18。就不能像没有封装前,随便操作了吧。
然后总结一个封装的好处:
- 提高程序的安全性,保护数据。
- 隐藏代码的实现细节。
- 统一接口。
- 系统可维护增加了。
继承
继承(extands)的本质其实对某一类进行抽象化,继承是类与类之间的一种关系。除此之外,类与类之间还有依赖,组合,聚合等关系,继承关系的两个类,一个为子类(派生类),一个父类(基类),子类继承父类,关键词是extands来表示。子类和父类的关系从意义上讲具有 is a的关系。在java里面都是没有多继承,都是单继承。子类可以继承父类所有的属性和方法。但是如果父类属性设置了成私有的,子类那就继承不到。
-
object类
在java中,所有类都继承object类,只是Java给隐藏掉了,就像无参构造方法一样。
-
super
super关键字跟this关键字一样,不过this指的是当前本类,而super指的是父类。它可以调用父类的方法和属性。this和super不能同时调用构造方法,super只能出现在子类的方法或者构造方法中。
-
重写
需要有继承的关系,子类重写父类的方法。
- 方法名必须相同
- 参数列表也必须相同
- 修饰符范围可以扩大,但不能缩小
- 抛出的异常范围可以缩小,但不能放大。
- 方法体可以不同
- static,final,private修饰的方法都不能被重写。
为啥用重写呢,基本就是父类的满足不了子类的需求。
在普及一下重载,重载需要:
- 方法名相同
- 参数类型,个数,顺序不同
- 返回类型可以相同,可以不同。
多态
即同一方法可以根据发送对象的不同而采取多种不同的行为方式。一个对象的实际类型是确定的,但是可以指向对象的引用类型却有很多。
多态存在的条件:
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
注意:多态是方法的多态,属性没有多态性。
案例:
//动物类(父类)
public class animal {
public void eat(){
System.out.println("父类");
}
}
//狗类(子类)
public class dog extends animal{
@Override
public void eat() {
System.out.println("我在吃骨头");
}
}
//猫类(子类)
public class cat extends animal{
@Override
public void eat() {
System.out.println("我在吃鱼");
}
}
//测试类
public class text {
public static void main(String[] args) {
animal c=new dog();
animal d=new cat();
c.eat();
d.eat();
}
}
输出结果是:
我在吃骨头
我在吃鱼
上面就是指的多态,父类的引用指向子类。由此可见,是不是多态可以使我们程序变得更加灵活。