1.封装
封装 ,举例:生活中整理书
-
在代码中就是权限问题
public int getMoney(){
//可以做一些逻辑判断
money = money - 1000;
return money;
}
int[]ars = new int[6];
public void setMoney(){
this.money = money;
//从手机端或者app客户端传过来的值(年龄),为了国家监察,存到数据库中的值,不能低于18岁
//有些够18了,但是写一个14,就不能写道数据库中
if(money >= 18){
ars[0] = money;
}else {
System.out.println("获取的年龄不对,重新获取");
}
}
2.继承
儿子跟父亲,DNA
java 只要敢写这个关键字 extend 说明就是子类跟父类的关系
左边一个类 extend 右边一个类
-
继承的特点:java中是跟人一样,单继承的路子,py,c++是多继承
-
java出来一个接口来替代跟弥补缺失
-
继承核心就是,我继承了父类的属性跟方法,
-
第二我们如果觉得父类方法不合适,我可以覆写父类的方法
-
this,它是针对当前对象,super它可以调用父类构造方法,跟方法,构造方法你就根据你想要用
-
几个参数数你就super(参数,参数,...),如果是调用父类的方法那么你就把super当前父类对象,
-
直接点super.方法
//@Override,就代表使用父类的 @Override public void getAll(){ //就是子类中调用父类的方法 super.getAll(); //多加一些功能了就 System.out.println("这是一条狗"); } //new 子类的时候,先执行父类的构造器,再执行子类的构造器
3.多态
向上转型
将一个对象,由子类的类型转型成为父类的类型
这个肯定没有问题,自动帮你转了,因为编译器知道,子类本来就拥有父类的所有属性跟方法
如果子类转型为父类,那么子类就不能调用自己原来的特有的属性跟方法了,因为她已经变为父类了
向下转型
将一个对象,由父类的类型转型成为子类的类型
存在失败的可能性,是一个显示转换,需要强制类型转换
向下转型后,将可以访问子类中独有的成员
向下转型如果失败,会提示ClassCastException
但如果确实想要向下转型,又不让他报错
instanceof 那就拿这个关键字来做判断类型检查,如果是同一个类型,那么就允许转
这样就不会报错了
一般都是声明父类new子类
public class MainClass { public static void main(String[] args) { //黑人转型为人,子类变父类 BlackPerson blackperson = new BlackPerson(); Person person = blackperson; //向下转型 if(person instanceof WhitePerson){ WhitePerson whitePerson = (WhitePerson) person; whitePerson.color = "白色"; } } } /** * 人 */ class Person{ String name; Person(){ } } /** * 黑人 */ class BlackPerson extends Person{ String age; BlackPerson(){ } } /** * 白人 */ class WhitePerson extends Person{ //颜色 String color; WhitePerson(){ } }
补充
1.equals()与==这个区别
equals()与==这个区别? 1.第一、==是操作符,equals()是个方法 2.==比较地址,如果是基本类型可以比较值相等,equals()对象值 3.运行速度,你想也知道==比较的是地址肯定快。 4.你确定equals()能比较对象值,你要这么覆写了父类也就咱们最上上类Object,它里面有一个equals(),其实跟咱们 * ==就没有区别,但为啥所有都说equals才能判读值呢,那是因为大多数都覆写了equals(),他们自己帮做了比较,所以equals()方法才能比较对象的值。 this 指的是当前对象 this 可以在构造方法当中用,可以在非静态方法中用,可以在构造代码块中用
2.Static 关键字
static 有静态属性,静态方法 静态的方法不能使用非静态的属性 因为静态的方法属于类 而非静态的属性是属于对象的 拿的类的调用对象,会出现问题,因为对象可能还没有,所以编译器不让调用 但是非静态的方法可以使用静态属性 传参数,一种可以通过构造方法,一种可以通过普通方法 People p1 = new People("xiaoming",13); //todo 下面就是静态方法的属性赋值与调用 PeopleStaticClass.name = "小红"; PeopleStaticClass.age = 18; PeopleStaticClass.getAll(); public class PeopleStaticClass { //静态的属性 第一个关键字是修饰,其实就是权限,公开的意思 //第二是静态属性 //第三是类型 public static String name; public static int age; public String color; //静态方法就是在前面加个关键字 public static void getAll(){ System.out.println("名字"+name); System.out.println("年龄"+age); } }