活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
static{ (静态代码块)}
- 实例代码块:每次创建实例都会被调用一次,用的很少
无继承关系静态 实例 构造器
有继承关系父类优于子类 静态块优于其他
static 静态 类属性 类方法
属性,方法,代码块
static String name=”名字”;
用static修饰的结构都不属于对象
public static void show(){
(静态方法)
}
main
sout(“Ch03.name”);
Ch03.show();
Static :静态的变量或者静态方法存在于方法区。静态的结构不会被垃圾回收
不属于某一个实例对象,只存在于方法区
实例方法和静态方法的互相调用
- 静态方法中不可以直接调用实例方法
想用就对象.方法名
New Ch03().show();
- 实例方法中可以直接调用静态方法
静态结构的加载,随着类的加载而加载
非静态的结构,随着对象的创建而加载
调用实例方法,必须要有;;主体。方法不能直接当参数,也不能直接调用
静态方法无论在那里都是 类名.方法名的形式调用,同一个类的静态方法之间可以省略类名
接口中的常量默认有public final static
开发中,基本上常量的声明都是public static final 类名.常量名 直接调用
静态方法没有重写概念
Arrays.toString();
Arrays.sort();
Integer.parseInt();
String.valeOf();
Date2String把日期类型转换成字符串类型
This super区别
无论是this还是super都不可以在静态结构中使用
静态结构属于类的,静态结构优先于对象而存在的
This 和super,必须有对象才能出现。必须有实例
类的组成结构:属性,方法,构造器,代码块,内部类
外部类:
内部类:在一个类的内部进行其他类结构的嵌套操作
实例内部类只能写实例代码块 不能写静态内部类
实例内部类的对象
Inner inner=new Ch01().new Inner();
静态内部类
Inner inner=new Ch01.Inner();
面向对象的特征:继承
继承的优点:
A:优点
提高了代码的复用性
提高了代码的可维护性
B:缺点:
类的耦合性增强了
开发的原则:高内聚低耦合
类与类之间的关系:
- 属性关系
- 参数关系
- 继承关系
例如:
生物 动物 人 猫
直接继承: 人——>动物 猫——>动物
间接继承:人——>生物
extends 继承
Persib Cat Animmal可以叫做Biology类的子类
Animal叫做Biology类的直接子类
继承的写法:
直接父类:写在zextends关键字后面的类
在Java中的继承是单继承,一个子类只能有一个直接父类,但是可以有多个间接父类
extends后面只能写一个类
继承的作用:
访问权限修饰符 protected受保护的 不同包的子类可以访问 不能被子类覆写
继承父类的属性,方法 创建子类对象时,要父类先被实例化,再子类
当一个类被实例化时,一定会实例化它的直接和间接父类。
子类的构造器可以有多个,但是必须和父类的构造器形式上统一
super关键字:代表调用父类的结构
super调用父类的方法 this调用当前类的方法
this和super区别
当使用super调用父类的构造器时,super(age)必须是第一句话
在当前类中使用this调用本类的构造器,this(name)必须是第一句话
所以构造器中只能选择一个
super指向的父类,不代表任何对象
this指向的本类,代表当前类的对象,方法的调用者
方法的重写 override
子类可以重写父类的方法
public String show(){
return super.show()+"话"
}
Protected 受保护的 Demo变成子类之后要Demo demo =new Demo(); 再调用
方法的重写,我们可利用到父类中已经运算过的结果,方法的重写体现的就是继承的核心,就是为了扩展父类的功能。
方法重写的规则:前提:继承与被继承的关系
1.访问权限 :重写的方法的权限不能低于被重写的方法,开发中一般都是等于
2.返回值类型 :必须重写的方法的返回值可以被重写的方法不同,但是必须是被重写方 法的子类,开发中一般一样
3.方法名 :必须相同
4.参数列表:必须相同
开发中如果要重写,基本一模一样,只变方法体
注解:方法的重写一般都是有注解的 标注是从父类继承的 不允许乱动 @Override 上方注解
方法的重写快捷键Override Methods
public Ch01 info(String name,Integer age){
Ch01 ch01=new Ch01;
ch01.setName(name);
ch01.setAge(age);
return ch01;
}
优化
public Ch01 info(String name,Integer age){
this.setName(name);
this.setAge(age);
return this; this谁调用它就代表谁 super代表不了对象,this能代表对象
super代表属性代表方法
public statiic void main(String[] args){
Ch01 ch01=new Ch01;
ch01=ch01.info("acc",20);
sop(ch01.getName()+ch01.getAge());
调用对象 代表本类对象(调用者)
setName是没有返回值的
void改为当前类的对象 如Person
return this;
属性就可以Person.setName().setAge();
链式处理
setName是没有返回值的
void改为当前类的对象 如Person
return this;
属性就可以Person.setName().setAge();
链式处理
练习:
* 有一个银行卡类,有账号和密码,余额,有存款和取款的方法。
* 创建一个借记卡类,继承于银行卡,转账额度。
* 存款和取款的方法,取款的时候,
* 如果超过了20000,则提示需要去柜台拿身份证办理!!!
* 创建一个信用卡类,继承于银行卡,信用额度。
* 有存款和取款的方法。
* 取款:如果余额大于0,则从余额中扣,
* 如果余额小于等于0,则会走信用额度。
* 余额:100,信用额度:50000,要取钱数:1000
*
最终在Demo类中测试相关功能