一:方法调用:
1、静态方法:
静态方法可以直接运用(static)。
非静态方法需要实例化(new 对象)。
static是和类一起加载的。
类实例化以后才存在。
public static void a(){
b(); //b报错
}
public void b(){
a(); //a不报错
}
2、形参和实参:
public static void main(String[] args) {
add(1,1); //实际参数
}
public static int add(int a,int b){ //形式参数
return a+b;
}
3、值传递和引用传递:
值传递
public static void main(String[] args) {
int a=1;
System.out.println(a); //输出1
change(a);
System.out.println(a); //输出1
}
public static void change(int a){
a=10;
}
引用传递(本质还是值传递)
public class Demo {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.name); //为null
change(student);
System.out.println(student.name); //为张三
}
public static void change(Student student){
student.name="张三";
//student是一个对象,指向的为class Student
}
}
class Student{
String name;
}
4、构造器:
一个类即使什么都不写,它也会存在一个方法
public class Student(){
public Student(){} //无参构造
}
类:(封装、继承、多态)
静态的属性 属性
动态的行为 方法
5、封装:(高内聚,低耦合)
属性私有(private)
所以需要public方法调用它们(gat/set)
6、继承:(java只有单继承,没有多继承)
例子:
public void text(String name){
System.out.println(name); //有参构造,属性
System.out.println(this.name); //子类里面的
System.out.println(super.name); //父类里面的
}
public class Fu {
public Fu() {
System.out.println("父类无参");
}
}
public class Zi extends Fu{
public Zi() {
//默认super(); 调用父类构造器必须在子类的前面。
//父类没有无参构造,则子类不能调用。
System.out.println("子类无参");
}
}
public class Demo {
public static void main(String[] args) {
Zi zi = new Zi();
}
}
//结果:父类无参
子类无参
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
super和this不同:
- this:本身调用者这个对象。本类的构造。
- super:代表父类这个对象。父类的构造。
7、重写:(非静态)
需要继承关系。
修饰符范围可以扩大。子类修饰符可以比父类大。
异常:范围可以缩小不能扩大。
返回值可以不同,但是改变后的类型必须是修改前类型的子类型。
8、多态:(属性没有多态,方法的多态)
有继承关系。
子类重写父类方法。
父类引用指向子类对象。
- 属性:编译看左边,执行看左边。
- 方法:编译看左边,执行看右边。
不可以的有:
- static方法,属于类,不属于实例。
- final:常量。
- private:私有的。
// Animal a = new Cat(); // 向上转型 // a.eat(); // 调用的是 Cat 的 eat // Cat c = (Cat)a; // 向下转型 // c.work(); // 调用的是 Cat 的 work