面向对象的三大特征
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅暴漏少量的方法给外部使用
封装
1.提高了程序的安全性
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增加
封装就是数据的隐藏 只暴漏一些简单的接口
关键词 private 私有的
get/set方法
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
//让其年龄不合法的设置为0岁
if (age>100){
System.out.println("名字不合法");
this.age=0;
}else {
this.age = age;
}
}
Person person = new Person();
person.setName("xiaotaoshen");
String name = person.getName();
System.out.println(name);//xiaotaoshen
继承
继承的本质是对某一批类的抽象
关键字 extands 扩展,子类对父类的扩展
Java中类只有单继承,没有多继承
继承是类和类之间的一种关系,一个是子类,一个是父类,子类继承父类 用关键词extands来表示
super注意点
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法和构造法方法中
3.super和this不能同时调用构造方法
重写
重写都是方法的重写 方法!方法!方法!
下面代码有静态和非静态的效果展示
父类的引用指向子类
方法的调用只和左边定义的数据类型有关
public class A extends B(){
public static void test(){
System.out.println("A")
}
}
public class B (){
public static void test(){
System.out.println("B")
}
}
public class Test (){
public static void main(String[] args){
A a = new A();
B b = new B();
System.out.println(a.test());//输出结果:A
System.out.println(b.test());//输出结果:B
//方法调用跟左边的 A B 有关
}
}
如果不加static的情况下 静态和非静态的方法是有区别的
public class A extends B(){
public void test(){
System.out.println("A")
}
}
public class B (){
public void test(){
System.out.println("B")
}
}
public class Test (){
public static void main(String[] args){
A a = new A();
B b = new B();
System.out.println(a.test());//输出结果:A
System.out.println(b.test());//输出结果:A
//子类重写了父类的方法
}
}
总结
1.需要有继承关系,子类重写父类的方法
2.方法名必须相同
3.参数列表必须相同 否则就变成重载了
4.修饰符:范围可以扩大 不能缩小
5.重写会抛出异常 范围可以缩小不能扩大 重写异常抛出范围不能大于父类
子类的方法和父类要保持一致,方法体保持不同
多态
多态即同一方法可以根据发送对象的不同而采用不同的行为方式
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
多态存在的条件
1.有继承关系
2.子类重写父类方法
3.父类引用指向子类对象 也就是可以通过父类new子类
注意:
1.多态是方法的多态,属性没有多态性
2.static 方法 属于类,它不属于实例
3.final是常量 修饰的不能被改变
4.private 方法 私有的 不能被重写
Instanceof
instanceof 关键词可以来判断两个类之间是不是父子关系,也就是继承关系
System.out.println(Object instanceof Student); //true
System.out.println(Teacher instanceof Student); //false