注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的人。
一、继承
Java继承的话套路和c++大体是一样的...,当然如果路过的盆友不懂继承机制以及为什么要有继承的话请点击这里->https://www.baidu.com/
直接上示例代码,读者可以大致看看->然后在跟着代码后面的解释 ->再次精读
//base.java
package inherit;
public class base
{
private int id;
protected int math;
protected int Chinese;
public base(int id) //有参构造器
{
this.id=id; //this 用来指向自身 这里用来区分 形参的id与类的成员id
}
public int re_id()
{
return id;
}
public int total_points() //总分
{
return math+Chinese;
}
}
//boy.java
package inherit;
public class boy extends base //用关键字 extends 继承
{
private int circuit;
public boy(int id) //构造函数
{
super( id); //用super调用父类的构造器 传入参数
}
public int total_points()
{
int a=super.total_points(); //用surper调用父类的方法
return a+circuit;
}
public void set_cir(int g)
{
circuit=g;
}
public void set_math_ch(int ma,int ch)
{
math=ma;
Chinese=ch;
}
public void set_math_ch(int ma)
{
Chinese=60;
math=ma;
}
public static void main(String[] args)
{
boy b =new boy(1);
System.out.println(b.re_id()); //使用基类的方法
b.set_math_ch(75); //使用只有一个参数的重载函数
b.set_cir(80);
System.out.println(b.total_points());
}
}
1.首先java中是通过关键字extends实现继承的。值得注意的的是在Java中实现的继承机制同C++中的公有继承一样!并且java不可以多继承!
2.构造机制和c++略有不同,在C++中如果父类的构造器是有参数的,那么在子类中的构造器应该通过成员初始化列表的的语法来完成参数传递的工作。在Java中通过super这个关键字在子类构造器中显示调用并传入参数!
3.Java支持成员函数重载和子类重写父类的函数。但是不支持直接像c++中那样进行默认参数,不过还是有对策的,可以利用重载巧妙的实现默认参数,具体可以参考上面代码中的set_math_ch函数!
4.this的用法同C++!不过有种很通用的技巧,用于方法内的局部变量与对象的数据域变量同名的情况!用this可以起到表示当前对象的数据域变量的作用。可以参考代码中的 this.id=id;
5.super这个关键字用法可以总结如下
- 【1】调用父类的构造方法;
- 【2】调用父类的方法(子类覆盖了父类的方法时);
- 【3】访问父类的数据域(可以这样用但没有必要这样用)
- 6.final关键字上一篇文章中提到过他相当于c++中的const 他还有另外的用法 就是 声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
- 7.当然也支持父类指向子类 如 base b=new boy();
- 8.最后还有一点就是java中所有类都是Object的直接或者间接之类。如果一个类没有显示的申明他的父类是谁,那么他的父类就是Object。
- 二、抽象类
- 1.抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
- 2.使用Abstract关键字来声明这个类为抽象类,Abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
- 3.抽象类的意义,这里只简单的总结一下,等学习完Java类的全部语法在进行系统的总结。
- 在面向对象的编程中,主要思想之一就是用类来描述这个世界的任何事物。不过这个世界的事物是可以归类的,比如猫、狗、大象。又比如我们键盘中的键 如space键 它既是空格键又是很多播放器的暂停键等等。我们可以按照归类他有联系的事物抽象出来,写成抽象类。抽象类并不指向特定的某个事务,他是抽象的,他代表着一类事物共有的特征!
- 4.下面用一个实例代码说明,比如某学校要收教材费,有高一到高三3个年级。教务办发出通知让各个年级汇总他们的教材费。那么这个类就可以做如下抽象
-
/*抽象类*/ package abstraction; public abstract class abstraction_jw { protected int ch; protected int math; protected int Eng; protected int ch_ma_en_money() { return ch+math+Eng; } public abstract int all_money(); }
/*高一类*/ package abstraction; public class one extends abstraction_jw { int history; //高一有历史课 public one() { //高一书的定价 ch=50; math=40; Eng=70; history=30; } @Override public int all_money() { return ch_ma_en_money()+history; } }
/*高二类*/ package abstraction; public class tow extends abstraction_jw { int physics; //高二有物理课 public tow() { //高二的书的定价 math=80; ch=70; Eng=60; physics=100; } @Override public int all_money() { // TODO Auto-generated method stub return ch_ma_en_money()+physics; } }
/*入口*/ package abstraction; public class jw_main { public static void main(String[] args) { abstraction_jw one_m=new one(); abstraction_jw tow_m=new tow(); System.out.println("高一:"+one_m.all_money()); System.out.println("高二:"+tow_m.all_money()); } }
----------------------------------------------------------------
本系列文章: