java oop 基础

java oop 基础

讲解知识点预览

数据类型

1 基础类型: int char short long double float 等。
2 复合类型: String 类 数组等
基础类型是指简单的数据类型,可以与bit进行直接换算。
比如一个int=32bit 1char=8bit
那为什么char是基本类型,而String就是复合类型呢?
原因如下:
1.表面上String的具体bit无法得知,只有在具体对象被赋值后,可以计算具体数据对象所用bit。如String a;此时a的值为null不知道具体长度。
String a=“abc”;这时才知道其长度为3个char.
2.本质上在Java中可以看到string其实是一个封装好的类。
下面是在官方文档里找到的描述:
java.lang
类 Stringjava.lang.Object
继承者 java.lang.String
所有已实现的接口: Serializable, CharSequence, Comparable
复合类型与基本类型的区别在于,复合类型是表示一个封装好的基本类型或者类的集合(数组),或者他还可能拥有自己的属性和方法(类)。
基本类型是数据最小的量化单位。

oop

  在讲下面内容之前。首先介绍一下属性和方法。
  其实 程序中的类,就像现实中的一个实物。现实中一只猫咪,他有他的基本属性体重、年龄、性别等。同时作为一只猫他有一些本能动作,如抓老鼠、吃饭、玩耍。一个类其实就是程序中的“实物”,他也有自己的属性和方法。
类、接口、抽象类的区别

1.接口:
接口是一个完全抽象的存在。为什么说他抽象呢。因为其中所有的方法只是 空有其名,没有具体功能。就好比我通过名字告诉你这是实现了什么功能但是我不做,等你具体实现。所以抽象类不能直接使用。必须通过继承,并在子类中重写所有抽象方法。使用子类来完成功能。
在Java代码中,直接创建interface接口类文件,接口中所有属性方法要使用static作为标识。在写子类的时候,就算当前子类对于该接口的方法不用完全实现,也需要将接口中包含的方法都写在子类中,只是依然可以不写具体方法(可以实现也可以不实现)。注意子类继承接口时方法前不用再加static。
例子:
public class ChessListener implements MouseMotionListener,MouseListener{ // public ChessList list; @Override
public void mouseDragged(MouseEvent arg0) { // TODO Auto-generated method stub }
@Override
public void mouseMoved(MouseEvent arg0) { // TODO Auto-generated method stub }
@Override
public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub }
@Override
public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub }
@Override
public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub }
@Override
public void mousePressed(MouseEvent arg0) { }
public void mouseReleased(MouseEvent arg0) { }
以上是继承了多个监听器接口的类。就算实际使用时不是全部需要,不用完全实现,也需要在子类中写上接口中的所有方法。
对于新手可能会问,为什么我能具体实现它,还非要写一个抽象类,这不是多此一举吗?这个在后面会讲。
2.抽象类: 抽象类其实是一个半抽象的类。里面的发方法部分是已经定义好的,也有未定义的static 方法。子类继承抽象类的时候可以不用将其中的抽象方法进行重写。抽象类介于接口和类之间。半实半虚。
3.类: 类中的属性和方法都是完全实现了的。可以直接使用。是完全实质化的。

重写与重载,继承与实现,构造器重写

继承:
继承就是指创建一个类获得父类的非私有的属性和方法。子类可以对父类方法和属性完全保留,也可以在此基础上增加新的属性和方法。这样可以将一类对象具有的公有特征做成父类,然后在继承时分别赋予特性,这样就简化和规范了类的设计。比如我们设置一个类名叫human,具备人的一切自然特征。但人又分男人和女人,男人需要更努力的挣钱,女人需要打扮的漂亮,就可以继承human再增添各自的方法。保证了基本方法和属性的不遗失,也精简了代码。
重写:
说到继承,就不得不提到重写。当我写了一个学生类,具备学生的基本属性学习。但我又想写一个大学生类,具备学生的基本素质,但学习方法又不太一样。此时明显继承学生类可以减少写的代码的行数,但又存在父类和子类中名为“学习”的方法又不太一样,那么就可以用重写解决。在子类中可以对该方法进行重新定义,保持名字不变,内容改变。
当我们采用
父类 对象=new 子类();
这种方法创建新对象时,此时对象的“学习”方法会是什么?
答案是子类的“学习”方法。
因为调用的是子类的构造函数并且由于重写了方法,其属性和方法都会符合子类。但是无法获得子类中特殊定义的方法和属性。换言之,只是子类对父类所拥有的方法和属性进行了覆盖。
构造器:
我们知道定义对象的格式是:类名+对象名=new 类名();
当我们没有后面的new 类名()时就会出现空指针报错。为什么呢。实际上new 类名()是调用了该类的构造函数。表示对该对象进行了构造才具有实体。
上面我们说到方法的重写,我们也可以对构造器进行重写:
当我们采用
父类 对象=new 子类();对象可以通过子类的构造函数赋值。

重载:
重载是在同一个类中,出现多个同名方法,形参列表不同。
比如一个构造函数,可以有多种写法。

public class Student {
private String name;
private int age;
Student(){
name=“Jack”;
age=0;
}
Student(String a){
name=a;
}
Student(int b){
age=b;
}
public static void main(String args[]){
Student stu = new Student();
System.out.println(“学生姓名是”+stu.name);
String age=String.valueOf(stu.age);
System.out.println(“学生年龄是”+stu.age);
}
}
采用不同的构造函数得到的结果不同,会根据形参选择适合的构造函数。

好的设计方法:

之前有留下一个疑问,为什么要用接口?非要写一个空的接口再通过继承去实现不是很麻烦吗?
实际上接口表示一个大的方法,比如说轮胎是汽车的一个配件,防滑轮胎是其中一种。我们在造车的时候是不是要给轮胎留一个位置安放,但是具体用到哪种轮胎跟实际使用有关。但我们要保证无论哪种轮胎都可以放进去,所以设立一个轮胎接口是很有必要的。其他轮胎都是轮胎接口的继承,完全可以调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值