package 继承与方法覆盖; /** * 继承: * 1、继承"基本"作用:代码复用;"重要"作用:有了继承才有"方法覆盖"和"多态机制" * 2、语法: * [修饰符列表] class 类名 extends 父类名{ * 类体 = 属性 + 方法 * } * 3、java中继承只支持单继承,一个类不能同时继承很多类,只能继承一个类; * 4、术语: * B类继承A类,其中: * A类称为:父类、基类、超类、superclass * B类称为:子类、派生类、subclass * 5、继承规则: * 私有的不支持继承 * 构造方法不支持继承 * 其他数据都可以被继承 * 6、java中只支持单继承,但一个类可间接继承其他类。 * 如: * c extends b{} * b extends a{} * a extends m{} * c直接继承b类,c类间接继承a、m类 * 7、若java中一个类没有显示继承任何类,则该类默认继承javaSE库中提供的java.lang.Object类 * * 方法覆盖: * 1、方法覆盖又称为方法重写,override/overwrite * 2、什么时候使用方法重写? * 当父类方法无法满足当前子类需求,子类须将父类中继承过来的方法进行重写 * 3、子类重写规则 * -方法重写发生在具有继承关系的父子类之间 * -返回值类型相同,方法名相同,形参列表相同 * -访问权限不能更低,可以更高。公开>保护>私有 * -抛出异常不能更多,可更少 * 4、私有方法、构造方法不能继承,所有不能覆盖 * 静态方法不存在覆盖 * 覆盖只针对方法,不谈属性 */public class ExtendsTest { public static void main(String[] args){ Animal u = new Animal(); u.move(); Dog u1 = new Dog(); u1.move(); Bird u2 = new Bird(); u2.move(); } }
public class Animal { public void move(){ System.out.println("动物在移动!"); } }
public class Dog extends Animal{ public void move(){ System.out.println("狗在狗叫!"); } }
public class Bird extends Animal{ public void move(){ System.out.println("大鸟在乱飞!"); } }
参数传递:
/**
* 方法调用时,涉及到的参数传递:
* 传递时,java只遵循一种语法机制,将变量中保存的"值"传递过去,
* 有时这个值是一个字面值(如test1中的10),有时这个值时另一个java对象的内存地址(如test2中的0*1234).
*
* 如:
* int i = 10;
* int j = i; //i传递给j,实际上只是将i变量中保存的10传递给j,j实际上是一块全新的内存空间
*
* User u = 0*1234; // User u = new User();
* User u2 = u; //u传递给u2,实际上时将0*1234赋值给u2,u和u2实际上时两个不同的局部变量
* //但这两个变量指向堆内存中同一个java对象,一个值改变另一个也改变。
*
*
*
*/
public class Test2 {
public static void main(String[] args) {
User u = new User(20);
// User u = 0*1234;
add(u);
System.out.println("main->:"+u.i); //输出21
}
public static void add(User u){
u.i++;
System.out.println("add->:"+u.i); //输出21
}
}
class User{ //构造方法
int i;
public User(int i){
this.i = i;
}
}
public class Test1 {
public static void main(String[] args){
int i = 10;
add(i);
System.out.println("main->:"+i); //输出10
}
public static void add(int i){
i++;
System.out.println("add->:"+i); //输出11
}
}