形参:存在于方法中 public void 方法名(int a) 此处int a 为形参,不被调用没有意义
实参:在运行时,具有真实参数,int a = 10 ;
对于基本类型,形参打改变不影响实参;
对于引用类型:形参的改变,会影响实参;因为引用类型的改变发生在堆中,在堆中值的改变是会影响到实参的,
== 这个符号是对比的地址值
多态: 事物的多种形态
特点: 父类引用指向子类对象 基于继承和重写 不能调用子类中的为重写方法
格式:(向上转型) 父类名 对象名=new 子类名();
Person p =new teacher();
(向下转型) 子类名 新对象名 =(子类名) 上转型对象名(在向上转型时,想要调用子类方法不行进行向下转型
Teacher t =(theacher)P;
向上转型:在同名的情况下调用时 父类有:成员变量,静态方法,构造方法,静态方法 子类:成员方法
向上转型:在同名的情况下调用时 子类有:成员变量,静态方法,成员方法,静态变量,
编译期:就是在编写代码的时间; 父类没有的,子类有的 进行向下转型
编译看左边,运行看右边,右边没有 去父类
成员变量
编译看左边,运行看左边
成员方法
编译看左边,运行看右边
静态方法
编译看左边,运行看左边
以后常见的多态形式
父类子类中出现相同的类型,然后将父类中创建一个对象作为形参,然后在这个形参中调用父类的方法
public class Text2 { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); Dogs dog = new Dogs(); dog.eat(); Animals a = new Dogs();//向上转型 a.eat(); Dogs d = (Dogs)a;//向下转型 d.run(); //这是mian方法中的形式 getAni(dog); } //这是常见的多态形式 public static void getAni(Animals ani) { ani.eat(); } } class Animals{ public void eat() { System.out.println("动物需要吃饭"); } } class Cat extends Animals{ public void eat() { System.out.println("猫吃鱼"); } } class Dogs extends Animals{ public void eat() { System.out.println("狗吃骨头"); } public void run() { System.out.println("狗会跑"); } }
抽象类: 没有方法体的类叫做抽象类
关键字 abstract(抽象的)
抽象方法:没有方法体的方法叫做抽象方法
abstract class 类名{ public abstract void 方法名(){ }}
如果一个类中继承一个抽象类,必须把未实现的抽象方法完成
抽象类 的特点:
1抽象类比一定有抽象方法;抽象方法一定在抽象类中
2抽象类不能创建对象,需要使用子类上转型
3抽象的子类要么实现抽象类中的所有的抽象方法,要么自己是一个抽象类
4抽象类有构造方法 但是仅是给子类对象初始化的 不能自身创造对象
5 abstract与final不能共存,因为abstract 是必须继承的,而final是不可以被继承的
组合类
在类里面 需要自己定义一个类来代表其中的某些变量,则在什么一个类在在原类中声明该类
class man{string a; phonr b;}
class phone {string c;}
接口:将新的方法定义之后姜磊实现的过程
格式:interface 接口名 {抽象方法}
例:interface Arr{publice abstrct void reraseArr();}
在接口中,修饰符可以省略,因为修饰符中的方法,全部都是抽象方法
implements:接口放下类中叫做实现
可以多实现;也可以多态,
接口名 对象名=new 类();
注意事项:
1. 接口中只能定义常量,默认public static final修饰
2. 接口中只能定义抽象方法(1.8之前) 默认是public abstract 修饰
3. 接口不能创建对象,使用子类向上转型
4. 接口的子类: 实现了接口的类 class 子类名 implements 接口1,接口2{}
5. 接口的子类要么实现接口中所有的抽象方法要么自己是一个抽象类
6. 一个类可以实现多个接口,并且可以在继承类的同时实现多个接口
7. 接口中没有构造方法
8. jdk8之后接口中可以定义已经实现的方法,但是必须使用static/default 修饰
9. 接口不能实现接口,只能继承接口,并且可以多继承
class 子类名 implements 接口1,接口2{}
抽象类和接口的区别:
1.一个类最多只能继承一个抽象类,但是可以实现多个接口
2.抽象类中既可以定义变量也可以定义常量,接口中只能定义常量
3.抽象类中既可以定义抽象方法,也可以定义非抽象方法,接口中能定义抽象方法(jdk8之前)
4.接口中没有构造方法,抽象类中有构造方法
5.接口只能继承接口不能实现接口,并且可以多继承