- 方法的值传递
- 构造方法:在创建对象的时候,给对象的属性赋值
- this关键字和this()语句:this表示当前对象的引用
- 使用private 保护类的属性;快速getter setter:Shift+Alt+S
java访问修饰符
private、public、protected、default
Static关键字
不创建对象就可以调用类中的属性和方法
static关键字:用来修饰类的属性和方法,表示静态的,静态属性/静态方法,可以直接被类名调用。
类名.属性名;类名.方法名
//修饰变量
访问修饰符 static 数据类型 属性名;
package com.m.demo;
public class Person {
public static String name;
}
package com.m.demo;
public class Test {
public static void main(String[] args) {
Person.name="abc";
System.out.println(Person.name);
}
}
//修饰方法
访问修饰符 static 返回类型 参数名(形参列表){
//方法体
}
//修饰常量
static 结合final修饰常量:表示静态常量,定义之后不能修改
访问修饰符 static final 数据类型 常量名;
命名要求:静态常量的写法 字母大写,多个字母之间用_连接
//修饰代码块
staic{
//代码块
}
目的:在类加载的时候,需要做什么
静态代码块在方法区中,只执行一次
- 用static修饰的属性,该数据就属于类,不属于对象,属性在方法区中,当类在方法区中被jvm加载的时候,静态属性就生成在方法区中。
- 用static修饰的方法一样在方法区中
- 静态属性和方法一定比对象的属性和方法先 加载 生成
- 不需要创建对象,可以直接通过类调用,提高代码效率
- 静态方法中不能写this/super,因为静态方法在方法区中,是优先创建对象产生的
- 静态方法中只能调用静态的方法和属性
- 普通方法中可以调用静态的方法和属性
- 比喻:将静态的方法和属性比作古人,普通方法(非静态)中的方法和属性比作现代人
- 子类不能重写父类的静态方法
10.子类如果写了跟父类同样的的静态方法,那么调用的是子类的静态方法,因为子类的静态方法覆盖了父类的静态方法。
package com.m.demo1;
public class Person {
static int sum=0;
public static void donate(int money) {
sum+=money;
}
public static void showMoney() {
System.out.println("总金额:"+sum);
}
}
package com.m.demo1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("请输入捐款人数:");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
for(int i=0;i<n;i++) {
System.out.printf("第%d个人请输入捐款金额:",i+1);
Person.donate(s.nextInt());
}
Person.showMoney();
}
}
代码块
执行顺序:静态代码块>构造代码块>局部代码块
继承
由一个类衍生出另一个类,这2个类就是继承关系
A extends B
A:子类/派生类
B:父类/基类
- 通过继承,让类和类之间发生关系
- java只支持单支继承。(A extends B,B extends C)
- 解决代码冗余的问题:通过类抽取出一个类,这个类定义其他的类的
**公共**
属性和方法,这个类就是父类;让其他类去继承父类,这些类都具有父类的属性和方法,把这些类叫做子类。 - 子类不能使用父类私有的属性和方法
- 满足is…a关系就可以有继承:狗是一个宠物
- 在字类的无参构造方法中,都有一个super();用来调用父类的无参构造;因为子类加载的时候,会先加载父类的属性方法,再加载子类的属性方法
- 如果父类是有参构造,没有写无参构造,那么子类必须调用父类的有参构造,而且要再构造方法的第一行,写super(参数)
super()语句
super():用来调用父类的构造方法
- 写在第一行
- 只能写在子类中
super()关键字
1、用来调用父类的属性和方法
2、用来区分父类和子类同名的属性
重写
重写发生再子父类之间,子类重写父类的方法
- 重写要求方法名一样,参数的个数,顺序,类型完全一样
- 返回值类型对重写是有影响的
- 子类的修饰符的范围不能比父类的小
- 不能重写父类private方法
- 好处:不仅能拥有父类的方法,也能扩展子类方法的功能
package com.m.demo6;
public class Phone {
public void send() {
System.out.println("send");
}
public void call() {
System.out.println("call");
}
public void show() {
System.out.println("show");
}
}
package com.m.demo6;
public class NewPhone extends Phone {
@Override
public void send() {
super.send();
System.out.println("send new");
}
public void call() {
super.call();
System.out.println("call new");
}
public void show() {
super.show();
System.out.println("show new");
}
}
package com.m.demo6;
public class Test {
public static void main(String[] args) {
new NewPhone().call();
}
}