Java面向对象包含的内容很多(面向对象的基本概念,类和对象,继承,接口,嵌套类和匿名类,反射,注解等等)。 所谓面向对象,就是其程序设计是以对象(Object)类为核心,以对象所拥有的数据状态和功能行为为工具解决特定问题。 每个对象都拥有两个属性:状态(state)和行为(Behavior)。
Java语法中通过extends关键字实现类的继承机制。 通过继承,子类自动拥有了基类的所有成员(成员变量和成员方法)。 Java只支持单继承,不允许多继承。即一个子类只能有一个基类,一个基类可以派生出多个子类。
1.在子类的基类中可以根据需要对从基类中继承的方法进行重写 2.重写方法必须和被继承方法具有相同的名称 3.重写方法不能使用比被重写方法更严格的访问权限
public class T_OverWrite { //父类 int age; String name; void setAge(int age) { this.age = age; } void setName(String name) { this.name = name; } int getAge() { return age; } String getName() { return name; } public String getInfo() { return ("我的名字是"+name+"我的年龄:"+age); } } public class Student extends T_OverWrite { String school; void setSchool(String school) { this.school = school; } String getSchool() { return school; } public String getInfo() { //这里就是重写了父类的方法 return ("我的名字是"+name+"我的年龄:"+age+"我的学校是"+school); } public static void main(String[] args) { T_OverWrite person = new T_OverWrite(); Student student = new Student(); person.setAge(20); person.setName("rong"); student.setAge(21); student.setName("1ing"); student.setSchool("哈哈"); System.out.println(person.getInfo()); System.out.println(student.getInfo()); } }1.在类中声明的static变量是静态成员变量, 2.它是该类的共有变量,在第一次使用时被初始化。 3.对于该类的所有成员变量来说,static成员变量只有一份 。 4.可以通过对象的引用和类名访问该变量
public class T_Static { private static int sid=0; private String name; int id; T_Static(String name) { this.name = name; id = sid++; } void print() { System.out.println("My name is "+name+"NO."+id); } public static void main(String[] args) { T_Static.sid = 100;//通过类名的调用改变static变量 T_Static one = new T_Static("小明"); one.sid = 1000;//通过对象的引用改变static变量 T_Static two = new T_Static("小华"); one.print(); two.print(); } }1.this可以看成一个对象,它的值是对当前对象的引用 2.当必须要指出使用方法的对象是要使用this
public class This { int i; This(int i) { this.i = i; } This add() { i++; return this;//将i的值返回给当前这个对象 } void print() { System.out.println(i); } public static void main(String[] args) { This rr = new This(100); rr.add().add().print(); } }1 一个基类的引用变量可以”指向“其子类的对象 2 一个基类的引用变量不能访问子类新增加的成员(属性和方法) 3 可以使用 引用变量+instanceof+类名 判断该引用型变量所指的对象是否属于该类或该类的子类 4 子类的对象可以当作基类对象来使用称为上转型,反之则称之为下转型 以下面小程序为例:
public class Animal { public String name; Animal(String name) { this.name = name; } } public class Cat extends Animal { public String eyecolor; Cat(String name, String c) { super(name); this.eyecolor = c; } } public class Dog extends Animal { public String furcolor; Dog(String name, String f) { super(name); this.furcolor = f; } public void f(Animal obj) { System.out.println("动物的名字:"+obj.name); if(obj instanceof Cat) { Cat ca = (Cat)obj; System.out.println("猫眼的颜色::"+ca.eyecolor); } } public static void main(String[] args) { Animal a = new Animal("a"); Cat c = new Cat("c","blue"); Dog d = new Dog("d","yellow"); d.f(c); System.out.println(a instanceof Animal);//true System.out.println(c instanceof Animal);//true System.out.println(d instanceof Animal);//true System.out.println(a instanceof Dog); //false Animal animal = new Dog("g","pink");//这里a虽然成了一条狗,但它只看到作为Animal的部分(向上转型) System.out.println(animal.name);//只能看到名字 //System.out.println(a.furcolor);//编译错误 Dog d1 = (Dog)animal;//要加强制转换符 System.out.println(d1.furcolor); Cat cat =(Cat)a;//向下转型,编译无错误,运行时出错 System.out.println(cat.name); }