(三)、sattic的注意事项:(多用在测试类和工具类)
非静态方法只有通过实列化之后才能被调用(也就是new之后) 因为在同一个类中,可以不用套娃.
1.静态方法中没有this指针:
正常的非静态方法中,都会在()里面有一个被隐藏的this指针。这个this指针我们是不能在里面添加元素的,因为这个this是虚拟机虚拟的。this是指谁调用这个函数,那么this就是谁。因为静态方法是归类的全部所有的,所以this指针是没用的。
2.静态方法只能访问静态:
3.非静态方法可以调用所有
(四)、继承:
1.什么时候用到继承:
当类与类之间存在多个共同关系的时候,我们可以设置继承关系。把相同的关系放到基类中去,不同的再分别放到派生类中去。
2.JAVA继承的特点
1.单继承:一个子类只能继承一个父类。
2.不支持多继承: 不能同时继承多个父类。(不同于C++)
3.支持多层继承:
4.java时直接继承或间接继承Object类的。
3.继承权限:
构造方法 :不管什么权限都是不能够继承的。
成员变量:不管什么权限都是能继承的, 只不过public权限的能够直接使用。private的只能借助公有权限的成员方法才能使用。继承和使用是两回事。
成员方法:当权限是非私有、非static、非final的时候就能够被结成和使用.
基类会生成虚方法表,然后当作家谱往后传
(五)、派生类对成员的访问
1.成员变量的访问规则
遵循:就近原则.
基类:
public class Person { String name; //没有访问权限 默认为public public Person() { } public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
派生类:
public class Student extends Person{ private String name="xiaohei"; public void show(){ String name="小王"; System.out.println(name); System.out.println(this.name); System.out.println(super.name); } }
测试类:
import java.sql.SQLOutput; import java.util.*; import java.awt.*; import java.lang.Math; public class hello { public static void main(String[] avgs) { Student s=new Student(); s.setName("李明"); s.show(); } }
2.成员方法的访问规则:
遵循就近原则:
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.sql.SQLOutput; import java.util.*; import java.awt.*; import java.lang.Math; public class hello { public static void main(String[] avgs) { Student s=new Student(); s.A(); } } class Teacher{ public void eat(){ System.out.println("吃教师的饭"); } public void drink(){ System.out.println("喝教师的水"); } } class Student extends Teacher{ @Override public void eat() { System.out.println("吃学生的......"); } @Override public void drink() { System.out.println("喝学生的......"); } public void A(){ eat(); drink(); this.eat(); this.drink(); super.eat(); super.drink(); } }
如果在派生类中,没有对基类的方法进行覆盖。那么输出的结构将都是吃老师的反 喝老师的水。
3.方法的重写
当父类的方法不能满足子类的要求的时候,那么我们需要重写方法。对子类的方法进行重写新的方法。(B继承C,A继承B。如果B发生覆盖。那么A继承的B也是更改的)
重写的注意事项:
1.子类方法名和形参列表要和父类完全相同。
2.子类重新方法的时候访问权限一定要大于等于父类的访问权限。
3.子类重新父类的方法时,返回值类型必须小于等于父类。
4.只有被添加到虚方法表中的方法才能被填写。