不同包中的类如何访问
package packa
class DemoA
{
void show(){
sop(“dsfsdfsd”);
}
}
1.要使一个包被另一个包访问 则需要被public修饰,并且被访问的成员也要public
2.proteced 你认我为父 你能拿到别人拿不到的
子类全部继承父类 还自己扩展 所以子类比父类大
class T{
private int i=0;
default j=0;
proteced int k=0;
public int m=0;
}
class TT{
public void m(){
T t=new T();
sop(t.j);
}
}
default 同一个包中可以访问
proteced 内部, 同一个包中 ,子类, 都能访问 ,但是不同的包不是子类不能访问
private 继承了也不能访问
子类继承父类的构造函数 用super()来访问
重写不能使权限变小了 比如父类是public 那么重写必须是public 总之不能使权限变小了
override
权限大小比较 public>protected>default>private
super 指向父类对象
继承中的构造方法 super必须写在第一句话
Object类
所有的类都继承了object
public class Person(){}自己编写的类也继承了object
finalize()
getClass()拿到编译好的class文件
hashcode()
toString()返回代表对象的字符串,描述当前对象的信息,一般建议重写这个方法
如 sop(“info”+Person) 类和字符串相连接 类自动调用toString方法
public class TestToString{
public static void main (String[] args){
Dog d=new Dog();
sop(d);//d会调用toString方法
}
}
hashcode 指的是对象的地址值
hashcode table 每一个对象都有独一无二的哈希编码
class Dog{
}
equlas在父类的作用是 如果是一个对象则返回false
equlas 比较对象里面的内容
public boolean equlas(Object obj){
if(obj==null)
return false;else {
if(obj instanceof Cat){
Cat c=(Cat)obj;
if(c.color==this.color)
return true;
}
}
return false;
}
String s1=new String("hlleo");
String s2=new String("hlleo");
s1==s2 false
s1.equals(s2); true
对象转型 父类的引用 也可以用子类
但不能用子类里面所有的方法 因为有的方法不是全部动物都具有的
多态=动态绑定
执行期间而不是编译期间 根据实际类型调用相应的方法
父类引用指向子类对象 父类里面被重写方法是调用子类重写的方法
1.要有继承
2.要有重写
3父类引用指向子类对象
抽象类
1,类名必须含有abstract
2,抽象方法定义
public abstract void enjoy();
抽象类不能实例化 必须被实现后才能被new
3抽象类中可以有不抽象的方法
方法不想被重写 用final
pulic class TestFinal{
publi static void main(String[] args){
}
}
class T{
final int i=8;
piblic void m(fianl int j){
}//不允许j在方法中被改变
}
fianl 如果修饰类 怎不能被继承
如 string类不能被继承
接口
特殊的抽象类
接口中所有的成员变量都用 static final 写不写都一样 默认的
所有的方法不用写abstract
Singer s2=new Teacher();
只能用Singer里面的方法
1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致
类与类之间的组合关系
聚集 has a 谁里面有谁 聚集分 聚合和组合
聚合 班级由一帮人组成
组合 事物联系程度更紧密