包:
在IDEA中,如果在一个包内new一个对象,而这个对象的类在另一个包内,那么创建这个对象时,就必须在类名前加上包的名字,用点隔开
例如:
com.it包下的A类
在com.ti包下new一个A类的对象需要这样操作:
com.it.A s1=new com.it.A();
还有更简便的方法:导包
直接在com.ti下导入:
import com.it.A;
修饰符
public都可以访问,private只能在一个类里访问
protected能在同一个包中访问,也能在不同包的子类访问
默认修饰只能在一个包中访问
final:修饰成员方法,成员变量,类
被final修饰方法不能被重写
被final修饰的成员变量不能被再次赋值
类被final修饰就不能再被继承了
当final修饰引用类型时
final Student s=new Student(); //Student是一个类
s.age=100;age为Student中的成员变量,这里不会报错
因为final修饰的时s,意为s的地址值不能变
若s=new Student();那么会报错,因为重新赋值地址是不被允许的
static:意思为静态,可以修饰成员方法,成员变量
static修饰的成员变量共享
static修饰daxue时
Student.daxue=”长沙理工大学”
那么大学就被赋值了且被共享
那么在测试类中创建Student类的对象s1,s2
s1.show(); s2.show();输出的大学都是 长沙理工大学
并不需要s1 s2单独赋值
推荐使用类名调用
静态成员方法只能访问静态成员
多态
同一个对象,在不同时刻表现出来的不同形态
例如 猫 cat c=new 猫();
动物 animal a=new 猫();
猫不同时刻表现了不同形态,这就是多态
前提和体现
- 有继承/实现关系
- 有方法重写
- 有父类引用指向对象
多态中成员访问特点:
成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
若父类有eat方法,而子类又重写了这个方法,那么a调用eat方法时会使用子类中的eat方法,若子类没有重写该方法,那么就会使用父类的eat方法,若父类没有eat方法,那么a就不能使用子类中的eat方法
多态的好处和弊端:
好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类特有的功能
多态中的转型:
向上转型:从子到父,父类引用指向子类对象
向下转型:从父到子,父类引用转为子类对象
Animal是父类,Cat是子类
Animal a=new Cat(); 向上转型
a.eat();会输出父类的eat方法,a.playGame();无法使用
1.eat();
向下转型:Cat c=(Cat)a;
c.eat(); 输出的是Cat的eat
c.playGame();