复习
public class Demo1 {
public static void main(String[] args) {
// GC(垃圾回收机制),finalize
// 常量:程序运行时不可变,final修饰的变量就是常量
// 封装:
// public:公有整个工程都可见(类、方法、属性)
// protected:受保护的 ,当前包,和挎包的子类可见(方法属性)
// 默认的:当前包可见,跨包就不可见(类方法和属性)
// private:私有的只有当前类是可见的
// JavaBean(实体类):
// 必须有无参构造器(跟框架相关)
// 属性都是私有的-----保护数据
// 有公有的get()和set()的方法-----访问和修改
// static: 静态的
// 可修饰 方法和属性(全局变量:类变量、静态变量)
// 不可修饰类、构造器、局部变量
// static修饰的方法和属性可以直接通过类名直接调用,
// 静态方法可以直接访问静态成员,不能直接访问非静态成员
// 静态成员对于这个类所有对象共享
// 单例
// Java继承:接口弥补了继承的缺点
// public class A extends(扩展) B() {}
// A 为子类 B为父类 A具有B所有的属性和方法,除了构造器和室友成员
// 子类可以添加自己独有的的属性和方法
// 开闭原则:对拓展开放,对修改关闭
// Java中类都有父类(object)
// 子类实例化的过程(创建一个子类对象时)
// 创建子类对象时,子类构造器会默认调用父类的无参构造器先创建父类对象,然后在创建子类对象
// 若父类没有无参构造器,子类构造器必须使用super()显示(写代码)调用父类的有参构造器,否则编译错误
// super();
// 1、调用父类其他构造器,只能写子类在构造器中,写第一行,使用一次
// 2.super.属性
}
}
重载与重写
重载(静态多态,编译多态,overload):一个类中同名不同参的方法
// 重写【覆盖】( 运行时多态,override):子类当中,与父类方法同名同参,同返回值的方法,
// 子类的访问权限修饰符不小于父类的被重写的方法
方法重写及上溯造型
============================
public class FatherDemo1 {
int num =100;
public void student() {
System.out.println("努力学习");
}
}
public class SonDemo1 extends FatherDemo1 {
int num= 20;
public void student() {
System.out.println("努力!");
}
public void study(){
System.out.println("1111!");
}
}
public class Test {
public static void main(String[] args) {
// SonDemo1 sd=new SonDemo1();
// sd.student();
// 上溯造型(向上转型);父类引用指向子类对象
// 父类引用不能子类拓展方法
// 调用的方法的取决于对象的类型,不取决于引用类型
FatherDemo1 fd= new SonDemo1();
fd.student();
// System.out.println(fd.num);//属性不可重写
// 下溯造型(向下造型):子类引用指向父类对象,只有上溯过的才能下溯
SonDemo1 fd1= (SonDemo1)fd;
fd1.study();
// 判断一个引用是否是子类
// if(fd1 instanceof FatherDemo1) {
// System.out.println("SonDemo1");
// }
}
}
===============================
重载的例题
public class Father {
int num =100;
public Father() {
test();
}
public void test() {
System.out.println("1");
num=num+1;
}
}
public class Son extends Father {
//int num=20;
public Son() {
super();
}
public void test() {
System.out.println("2");
num=num+2;
}
}
public class Test {
public static void main(String[] args) {
Father f=new Son();
System.out.println(f.num);
// Father f1=new Father();
// System.out.println(f1.num);
}
}