Java入门教程笔记(一)
Java入门教程笔记(二)
Java入门教程笔记(三)
因为昨天一直在搞那个德扑模板,所以今天写第四份笔记
一、对昨天的补充
1、访问权限修饰符
(1)类的修饰符
public:任何一个包内都能用
friendly(等同于前面没有修饰符的情况):只有本包内能够使用
(2)变量修饰符
public: 任何其它类、对象都可以访问public修饰的属性和方法
protected:同一类,同一包可以使用。不同包的类B要使用类A,必须满足类A是可见的(public),类B是类A的子类这一条件
friendly(等同于前边没有修饰符的情况):在同一程序包中出现的类才可以直接使用它修饰的数据和方法
private:不允许任何其他类存取和调用
一个更加直观的图:
2、类常量:
被final修饰符修饰的对象
例如:
public static final int UNKNOEN = 99 public static final DAYS = 365; public final double RATE = 10.0;
3、main方法
用于执行的java文件中必须有一个main方法
public static void main(String[] args)
使用小黑窗执行以下指令
c:>java User one two three时
args[0] = “one” args[1]=“two” args[2] = “three”;
还漏了两份作业······在下一篇笔记里面提一下吧
二、继承
两个类,子类继承父类,具备一部分和父类一样的属性和方法(被public,private,friendly修饰的),并可能有一些不同于父类的属性或方法
1、重写和重载
重写(Overriding):子类继承父类的方法时改写此方法(方法名称、参数表都不变)。
重载(Overloading):多个方法同名,但是其参数的个数、
类型、顺序有所不同
2、super关键字
当父类的方法被子类覆盖的时候,如果需要重新调用父类的方法或者属性可以用super关键字
3、构造方法
在创建新的子类对象时,首先调用父类的构造方法 super()(系统默认执行参数表为空的构造函数)。这个过程会反复的进行,直到继承链的最顶层
如果父类中没有参数表为空的构造函数就会报错,我们可以用super自己调用设定好的构造函数
例如
Person.java
package first; public class Person { protected int age; protected String name; public Person(String n,int a) { name = n; age = a; } void myInfo() { System.out.println(name+","+age+"岁"); } }
Student.java
package first; import java.util.*; public class Student extends Person{ String major; public Student(String n,int a,String m) { super(n,a); //name = n; //age = a; major = m; } public void print() { myInfo(); System.out.println("攻读专业为"+major); } public static void main(String[] args) { Student a[] = new Student[10]; Scanner in = new Scanner(System.in); int n = in.nextInt(); for(int i=1;i<=n;i++) { a[i]=new Student(in.next(),in.nextInt(),in.next()); } for(int i=1;i<=n;i++) a[i].print(); } }
4、与C++不同,任何一个类的父类是唯一的
由final修饰的方法可以被继承,但是不能被重写
5、upcasting(向上转型)
Person p1 = new Person(); Student s1 = new Student(); //class Student extedns Person p1 = s1;//可 s1 = p1;//不可 //子类变量可以上接父类,父类变量不能上接子类(懂意思就行)
upcasting之后,还可以通过强制转型转回原来的子类
但是upcasting之后不能使用原来子类特有的方法
安全的向下转型
if(p instanceof Student) s = (Student)p; // 经过判断之后可以进行向下转型
upcasting之后,调用父类的在该子类中被重写过的方法,编译器会选择子类中那个重写过的方法执行,不执行父类中的那个
6、动态绑定
父类和子类可以具有名称和signature完全相同,但是内容不同的两个static方法。在子类中,父类的方法被子类的方法隐藏
被隐藏的父类中的静态方法不能够从子类中访问。
Static修饰的方法是可以在子类中继承的,但是在执行upcasting之后,静态方法不会出现动态绑定的现象