代码快:在java中, 使用{}括起来的代码就被称谓代码快
代码快分类:
1:局部代码快:定义在方法中.作用是让变量尽可能早的从内存中施放 提高效率
2:构造代码快:定义在成员位置. 类中方法外 作用里边存储的是所有构造方法的共性内容
因为他是优先于构造方法执行的.从而提高代码的复用性和编写效率
3 静态代码快:被static 修饰的代码块. 一般是用来加载驱动的. 因为他是随这类的加载而执行.
特点. 静态代码快值执行一次 (类文件值加载一次的情况下)
4同步代码快: 被syncharonized修饰的代码快. (多线程的时候讲)
什么是继承:extends
让类与类之间产生关系 子父类关系
继承的好处和坏处
好处: 提高代码的复用性. 提高代码的维护性. 让类与类之类产生了关系. 是多态的前提.
多态:让类与类产生的关系 方法重写
弊端!! :类的偶合性增强了.
开发的原则: 高内聚 底耦合.
耦合:;类与类的关系
内聚:就是类自己完成某事情的能力
java只支持单继承. 不支持多继承.多继承是有安全隐患的.(一个儿子只能有一个亲爹) 但可以多层继承
总结: 看顶层用底层.
继承的注意事项:
1: 子类智能继承弗雷所有非私有的成员.(成员方法和成员变量)
2:子类不能结成弗雷的构造方法.但是可以通过super 关键字
3:不要为了部分功能而去继承.
项目经理. 姓名. 工号 工资 奖金.
程序员. 姓名 工号 工资.
什么hi后使用继承. 继承其实提现的是一种提现关系."is a" 满足 is a 关系的时候就可以考虑使用继承
继承中的成员特点:
成员变量:
够脏方法:子类所有的够脏方法默认都去访问了弗雷的午餐够脏 为什么?
用于子类队形访问弗雷数据前,对弗雷数据进行初始化.
值要子类对象一创建. 就可以直接使用弗雷中的所有,飞私有成员
所有的类都直接或间接继承自object类 是所有类的弗雷. object类中只有一个午餐够脏
成员方法:
方法重写: 子类和弗雷一模一样的方法.返回值也必须完全一样 或者有子夫类关系.
方法重写的英勇: 当子类需要弗雷的功能.而功能主体子类
有自己特有的内容时 可以重写弗雷中的方法,这样既沿袭了父亲的功能 有定义了子类的特有内容
大白话. 想使用父亲的,而且还想用自己的就考虑
注意事项:
1:弗雷的私有方法,不能被子类不能重写
2:子类重写的时候 方法的访问权限 不能低于父类的访问权限:从小到大. private --> moren -->protected public.
3:弗雷的静态方法能不能被 子类的飞静态方法重写
静态只能覆盖静态 严格来讲 算不上重写
面试题:方法重载和方法重写的区别.
override和overrload有什么区别.
方法重写:子类中出现了和父类中方法声明一模一样的方法 与返回类型有关 返回值一直 或者是子类的
方法重载:本类中出现的方法名一样 参数列表不同的方法.与返回值类型无关
子类对象调用方法的时候:
先找子类本身, 在找父类,
使用变量遵循就近原则. 局部位置有就使用.没有就去本类成员位置找,有就使用 没有就去父类的
成员位置找. 有就使用. 没有就报错
this和super的区别. :
this:当前对象的引用.谁调用我 我就代表谁
sper:代表当前对象弗雷的引用.
区别是:
1:调用成员变量: this.成员变量: 既可以调用 也可以调用弗雷调用 前提是本类没有
super 成员变量: 值能调用弗雷的成员变量
2:调用够脏方法:
this(参数) : 调用本类的构造
super(参数):智能调用父位的构造
3,调用成员方法:
super 成员方法: 值能调用弗雷的成员方法
this.成员变方法: 既可以调用 也可以调用弗雷调用 前提是本类没有
如果弗雷没有午餐够脏怎么办:
第一种. 通过this(参数) 的形式调用本类的其他构造
第二种 super(参数) 的形式调用弗雷的代餐够脏
注意事项: super()语句和this() 语句必须放在够脏方法的第一行
问题: super 关键字和this 关键字.在同一个够脏方法中 能不能共存.
可以共存.
class Demo {
public static void main(String[] args) {
Cat c = new Cat("屎黄色",1);
c.eat();
c.catchMouse();
System.out.println(c.getColor() + "..." + c.getLeg());
Dog d = new Dog();
d.setColor("粑粑色");
d.setLeg(9);
d.eat();
d.lookHome();
System.out.println(d.getColor() + "..." + d.getLeg());
}
}
class Animal {
private String color;
private int leg;
public Animal() {}
public Animal(String color, int leg) {
this.color = color;
this.leg = leg;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setLeg(int leg) {
this.leg = leg;
}
public int getLeg() {
return leg;
}
public void eat() {
System.out.println("吃饭");
}
}
class Cat extends Animal {
public Cat() {}
public Cat(String color,int leg) {
super(color,leg);
}
public void catchMouse() {
System.out.println("抓胡志明");
}
}
class Dog extends Animal {
public Dog() {}
public Dog(String color,int leg) {
super(color,leg);
}
public void lookHome() {
System.out.println("看胡志明");
}
}
class Demo {
public static void main(String[] args) {
Cat c = new Cat("胡志明",17);
c.eat();
c.catchMouse();
System.out.println(c.getColor() + "..." + c.getLeg());
Dog d = new Dog();
d.setColor("自己");
d.setLeg(9);
d.eat();
d.lookHome();
System.out.println(d.getColor() + "..." + d.getLeg());
}
}
class Animal {
private String color;
private int leg;
public Animal() {}
public Animal(String color, int leg) {
this.color = color;
this.leg = leg;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setLeg(int leg) {
this.leg = leg;
}
public int getLeg() {
return leg;
}
public void eat() {
System.out.println("寻找吃的);
}
}
class Cat extends Animal {
public Cat() {}
public Cat(String color,int leg) {
super(color,leg);
}
public void catchMouse() {
System.out.println("抓主老鼠");
}
}
class Dog extends Animal {
public Dog() {}
public Dog(String color,int leg) {
super(color,leg);
}
public void lookHome() {
System.out.println("看胡志明");
}
}
final 关键字:
概述:final 是最终的意思. 也是关键字 可以修饰类. 变量. 方法.
final 修饰特点.
修饰类 类不能被继承 但是可以继承其他类.
修饰变量, 变量变成常量 只能被赋值一次 一般和public static final 他们三者有屋顺序
没有顺序关系 但是一般 public static final.
修饰方法 方法不能被重写
基本类型,是值不能被改变
引用类型,是地址值不能被改变. 对象中的属性可以改变.
修饰变量的初始化时机:
显示初始化
在对象构造完毕前即可.
接口与接口之间的继承: |