1.父类也称作超类,基类,派生类
2.Java中只有单继承,没有像C++那样的多继承,多继承会引起混乱,使得继承链过于复杂,系统难于维护
3.Java的接口可以多继承;类只能单继承
4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类的私有属性和方法)
5.如果定义一个类,没有调用extends,则它的父类是:java.lang.Object。
2.Java中只有单继承,没有像C++那样的多继承,多继承会引起混乱,使得继承链过于复杂,系统难于维护
3.Java的接口可以多继承;类只能单继承
4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类的私有属性和方法)
5.如果定义一个类,没有调用extends,则它的父类是:java.lang.Object。
方法的重写override(指的是子类重写父类的方法)
子类通过重写父类的方法,可以用自身的行为替换父类的行为
还回值类型声明异常类型,子类小于父类
子类通过重写父类的方法,可以用自身的行为替换父类的行为
还回值类型声明异常类型,子类小于父类
Object类是所有Java类的根基类,也就意味着所有的Java对象都拥有Object类的属性和方法
package cn.sxt.oo2;
//object是对象的意思
public class TestObject { //继承了Object类
public static void main(String[] args) {
//Object obj;
TestObject to = new TestObject();
System.out.println(to.toString());
Perso p2 = new Perso("洗洗",6);
}
public String toString(){
return "测试Object";
}
package cn.sxt.oo2;
//object是对象的意思
public class TestObject { //继承了Object类
public static void main(String[] args) {
//Object obj;
TestObject to = new TestObject();
System.out.println(to.toString());
Perso p2 = new Perso("洗洗",6);
}
public String toString(){
return "测试Object";
}
}
class Perso{
String name;
int age;
public String toString(){
return name+"年龄:"+age;
}
public Perso(String name,int age){//构造器
}
}
class Perso{
String name;
int age;
public String toString(){
return name+"年龄:"+age;
}
public Perso(String name,int age){//构造器
}
}
继承_equals方法的重写:
“==”代表比较双方是否相同,如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象;
equals是Object类中定义的方法,public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。
package cn.sxt.oo2;
“==”代表比较双方是否相同,如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象;
equals是Object类中定义的方法,public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。
package cn.sxt.oo2;
public class TestEquals {
public static void main(String[] args) {
Object obj;
String str;
User u= new User(111,"邹奇方","35551520");
User u2 = new User (000,"邹奇方","65551520");
System.out.println(u==u2);
}
public static void main(String[] args) {
Object obj;
String str;
User u= new User(111,"邹奇方","35551520");
User u2 = new User (000,"邹奇方","65551520");
System.out.println(u==u2);
}
}
class User{
int id;
String name;
String pwd;
public User(int id, String name, String pwd) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
}
public boolean equals(Object obj) {
return (this == obj);
}
}
super是直接父类对象的引用。可以通过super来访问父亲中被子类覆盖的方法或属性。
package cn.sxt.oo2;
class User{
int id;
String name;
String pwd;
public User(int id, String name, String pwd) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
}
public boolean equals(Object obj) {
return (this == obj);
}
}
super是直接父类对象的引用。可以通过super来访问父亲中被子类覆盖的方法或属性。
package cn.sxt.oo2;
public class TestSuper {
public static void main(String[] args) {
//new ChildClass().f(); //此行注释无输出结果,此行不注释输出4个结果,故子类也可继承父类的输出
}
}
class FatherClass{
int value;
public void f(){
value=100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass{
int value;
public void f(){
super.f(); //调用父类对象的普通方法
value = 200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value); //调用父类对象的成员变量
}
}
public static void main(String[] args) {
//new ChildClass().f(); //此行注释无输出结果,此行不注释输出4个结果,故子类也可继承父类的输出
}
}
class FatherClass{
int value;
public void f(){
value=100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass{
int value;
public void f(){
super.f(); //调用父类对象的普通方法
value = 200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value); //调用父类对象的成员变量
}
}
面向对象三大特征_封装——访问控制符:
修饰符 同一个类是否能看见 同一个包中 子类 所有类
private *
default * *
protected * * *
public * * * *
修饰符 同一个类是否能看见 同一个包中 子类 所有类
private *
default * *
protected * * *
public * * * *