java面向对象和类,继承和多态

1.方法

定义方法

(1)public String getName(){

return this.name;

}

getName方法有返回值所用String

(2)public void setName(String name){

this.name = name;}

setName 没有方法没有返回值所以用void

方法名称首字母小写,后面的每个字母大写。

括号内是参数列表

this:方法内部可以使用隐式变量this,this指当前实例,this,field可以访问当前实例字段。

(2)中不能省略this,因为括号内部有局部变量名name,如果用name首先指的是局部变量名,而不是字段。

调用方法:  实例变量.方法名(参数)

方法中的参数绑定:你可以传递过去使name赋值,但是person中修改name变量,不影响main中的变量n的指向。

使用private定义方法,只能内部调用,外部只能掉public方法。

 

2.构造方法。

构造方法用来初始化实例,没有构造方法时编译器会自动调用构造方法。

定义多个构造方法,编译器根据参数自动判断。

构造方法里面也可以用构造方法。

public person();默认

 

 

3.继承

public class Person{...

}

public class Student extends Person{

}

Student从Person中继承,Student继承了Person的全部功能。Student只需要编写新的功能。

如果没有extends则默认从Object中继承。

继承树:一个类有且仅有一个父类,Object除外。

protected:

Person类定义的private字段无法被子类访问,

用protected修饰的字段可以被子类访问。

protected把字段和方法的访问权限控制在继承树内部。

super:

子类的第一句必须使用父类的构造方法,调用super()

没有super()时编译器会自动生成super()

如果父类不是默认的构造方法,子类就必须显示调用super()

向上转型:Person p = new Person();   Student s = new Student();

向上转型则为 Person ps = new Student();  Object o1 = p; Object o2 = s;

向下转型 :Person p = new Person();

Student s = (Student) p;向下转型。p可能指向的是Person的实例也可能是Student的实例。

当指向的是Persong 实例时会报错。

instanceof:操作符可以判断对象的类型。 p instanceof Person,p是Person的子类或本身是才为true。

p为null,则都为false。所以向下转型的时候先用instanceof判断,在向下转型

if(p instanceof Student){

Student s = (Student) p;

}

区分继承和组合:继承是is关系,组合是has关系。

Student 不宜从Book中继承但是可以有一个Book实例。

private Book book;

 

4.多态

(1)Override:子类再写父类的方法就叫覆写,

方法参数里也必须相同,方法签名不同就不是Override

加上@Override可以让编译器帮助检查是否进行了正确的覆写。

@Override不是必须的。

 

(2)Person p = new Student();

p.run();p声明的是Person,但是实际指向的是Student.所以调用的Student的run方法

 

(3)Objecr定义的几个重要的方法:

toString:把instance 输出为String         public String toString(){}

equals: 判断两个instance是否逻辑相等  public boolean equals (Object o){}

hashCode:计算一个instance的哈希值。public int hashCode(){ }

 

(4)super:super可在子类的覆写方法中调用父类被覆写(Override)方法

public class Person{

public String hello(){

return “hello, ” + name;

}

}

public Student extends Person {

@ Override

public String hello(){

return super.hello() + "!";

}

}

(5) final:用final修饰的方法不能被覆写ovrride,public   final setName (String name){}

用final修饰的字段在初始化后不能被修改。private final int score;

用final修饰的类无法被继承。public final class Student extends Person{}

5.抽象类

(1)抽象方法:class定义了方法但是没有执行的代码,这个方法就是抽象方法。

必须用abstract修饰,抽象方法没有执行语句,类也是抽象类

pinlic absttract class Person {

public abstract void run();

}

不能实例化抽象类如:Person p = new Person();

但是可以实例子类如:Person s = new Student(): Person t = new Teacher();

调用抽象方法可以实现多态。s.run();        t.run();

(2)抽象类是用来被继承,其子类必须实现其定义的抽象方法,否则编译错误。

所以抽象方法其实定义了规范。如果不是实现抽象方法,则该子类任是抽象类。

5.接口

接口(interface): 如果一个抽象类没有字段,所有的方法全是抽象方法,就可以把该抽象类改为接口

public interface Hello{

String hello(); 

String goodbye();

}

public class Person implements Hello {....}

public class Robot implements Hello,Comparable{...}

实现interface使用implements,可以实现多个interface.

抽象类和接口区别

 注意:

inerface不能定义普通的实例方法但是能定义default方法

其子类不一定要实现default的方法,同时可以被子类覆写。

(2)一个interface可以继承自另一个interface,使用extens

public interface Person{String getName();}

public interface Students extends Person{String getSchool();}

public class primaryStudent implements Student{

@Overridde

public String getName(){...}

@Override

public String getSchool(){....}

}

PrimaryStudent必须实现Student的方法也必须实现Person的方法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值