java 面向对象学习

1.面向对象:


c语言是面向过程的语言,关心具体的函数实现,java不是不关心具体函数的实现,而是在这个基础上做了一个抽象(改进),首先认为所有的方法(行为)是属于某个对象.那么面向对象首先思考的是对象和对象之间的关系,当我们思考清楚过后,我们才考虑具体的代码逻辑,也就是我们常说的过程,面向对象首先关心的是对象是否有某种行为和属性,而最后在关心函数(行为的)实现.
 
2.类和对象


访问修饰符   class  类名{
  //属性
  //方法(函数,行为)
}
类:代表的是一个类型的数据,是一个抽象的概念,是不能直接使用的.要使用类的属性和方法,必须通过类的实例对象(实实在在的具体的某一个对象)
对象的创建: new关键字来完成的.
1)类的属性如果没有手动的初始化  最基本数据类型数据值0,引用类型null  包括字符串,也是null.
2)我们的类是抽象的  必须通过具体的实例对象来调用
 
3.构造函数:


1)JDK为我们提供创建对象的一个方法().
2)格式: 访问修饰符    类名(参数列表){
       //具体的代码;
   }
//这里的参数列表可以不需要,如果没有呢  我们叫做默认的构造函数,如果有参数列表,是叫做有参构造函数.
3)假如我们不写默认的构造函数,JDK会为我们提供一个默认的实现,当我们写了一个有参构造函数,那么默认的构造函数就不能被调用,我们必须手动的写一个默认的构造函数.
4)构造函数的重构
  上面讨论的问题,其实就是构造函数的重构问题.
5)构造函数的调用,当我们调用默认构造函数或则有参构造函数的时候,只有一个构造函数被调用.
 
4.this指针

代表当前的对象(就是你目前调用的那个,谁去调用,谁就是当前对象)


package cn.ddy.java1.demo01;


public class Person {


private String name;
private int age;


public String getInfo() {
return name + "_" + age;
}
//当你写了带参数的构造函数时,必须再写一个默认的构造函数
//this 指针,  代表的是当前的对象
public Person(String name, int age) {
//System.out.println(name + age);
this.age = age;
this.name = name;
}
//默认的构造函数  不带参数的
public Person() {
}


public static void main(String[] args) {
Person per = new Person("ddy", 29);//创建了per对象后,  per的name和age已经赋值了
System.out.println(per.getInfo());
}


}


**********************************************************************
public static String address = "love";


public static String getMsg(){
return  "I love ";
}


System.out.println(Person.address);
String str = Person.getMsg();
System.out.println(str);



//继承  ,非私有的数据(  属性和方法)
//接口:  一个类实现接口通过implement  实现  
//实现父类接口,必须在子类中实现父类的方法
public class Son implements IFather {
// Son 继承 Father
public void go() {
System.out.println("子类实现go方法");
}


@Override
public void out() {
// TODO Auto-generated method stub
System.out.println("子类实现out方法");
}


public static void main(String[] args) {
// TODO Auto-generated method stub
Son son = new Son();
// son.name = "sdf";
// son.age = 23;
son.out();
// System.out.println(son.age+son.name);
}
}


/*
 * 接口:   接口不能有属性,更纯粹
 * */
public interface  IFather {
public void go();
public void out();
}


5.GC:


java为我们提供的垃圾回收机制,不需要手动去管理内存的时候.Person  person=new Person(),person=null;GC帮我们清理掉内存中的对象.
Finalize():可以简单的理解成在垃圾回收(GC)清理对象前所调用的方法
System.gc()启动垃圾回收机制(GC),不一定能启动.我们可以简单的理解成报警,报警后,警察不一定来,怀疑你假报案.
 
6.参数传递方式:值传递.
 
C:值传递,地址传递
Java:值传递.   引用数据.Person  person=new Person(), person是应用类型?是引用类型 但是不是地址
Person   person:是句柄,可以简单的理解成new  Person()这个对象的名字或则别名.   C语言操作的是堆中Person这个实实在在的对象通过地址来找到person,  java通过句柄(名字)而不是真的对象地址.
注意:虽然引用传递属于值传递,但是也可以改变句柄的值
小结:1)java对象时放在JVM的堆空间中,简单理解就是内存的一块区域
2)java引用是放在栈上的.
3)我们使用对象时通过引用来使用,我们并没有实际的操作堆中数据  比如 Person   person=new Person();person=null;意思你就是不指向任何的对象,此     时我们是不能是用person对象的。因为引用已经指向null.等待垃圾回收没有指向的person对象.


7.static关键字


 1)static可以修饰属性和方法修饰属性叫做静态的属性,修饰方法叫做静态方法
 2)静态属性和方法可以直接用对象或者类名直接调用.
 3)static直接修饰作用域叫做静态块
 4)对于java类的加载方式来说,在类的加载过程中就已经存在静态的数据,也就是用static修饰的属性,方法,静态块,而对象只有在通过new  关键字创  建后才会存在.
 5)实例方法和实例属性只有创建对象后才可以使用,那么在静态方法中使用实例的东西(属性,方法,this)是不能编译通过。在静态方法中可以创建对象.


8.Main函数


Main函数是java程序执行的入口




9.继承:


 为模拟现实世界中,父子关系的一种对象之间的关系.java提   供了这种关系的一个抽象,这种描述的抽象叫做继承.
 Extends关键字来实现继承
 1).通过子类的对象访问父类的非私有数据(属性和方法)
 
10.抽象类


 1)Abstract 关键字来定义一个类,这样的类叫做抽象类
 2)通过abstract修饰方法,而没有方法体的方法我们叫做抽象方法.如果子类要实现抽象类,那么子类必须实现父类的抽象方法.
 3)抽象类是不能用new关键字创造对象.
 4)抽象函数中可以有实例的方法.抽象类中可以不要抽象方法,
 但是这样和普通类一样,无意义.


11.接口:


Interface关键字类定义,接口比抽象类更加的纯粹,只有抽象的函数声明,没有具体的代码
1)接口中不能有属性
2)一个类实现接口通过implements关键字来实现.
3)一个类要实现父类接口,必须在子类中实现父类的方法
4)接口不能通过new 关键字来创建对象
 
12.多态性:


同一种行为表现出不同表现方式,往往呢通过继承和接口来实现.
Java面向对象有三大特性:1)封装性  2)多态性   3)继承性
Extends:
Implements:
Java的继承是单继承
Java实现接口可以实现多个.子类要实现所有接口的方法
 
重写:子类可以重新定义父类的行为方法的具体逻辑(实现)
多态性:1)可以重写来表现出不同的表现方式(统一行为).
       2)动态绑定:a.可以通过父类的引用指向子类的对象
                  b .当子类实现了父类的方法,并且重写了此方法,那么父类的句柄(引用)调用此方法的时候,会调用子类的方法.假如没有重写父类的方法,会调用父类的方法.
 
小结:继承链:1)当创建子类对象的时候先去调用父类的构造函数,然后调用子类构造函数.
           2)抽象类可以有构造函数,但是不能创建对象
           3)Super关键字可以实现父类属性和构造函数的调用.
Interface1  extends   interface2?  这个问题留给大家   思考. 
 
 
13.Final关键字


Final可以修饰类,修饰方法,修饰变量
Final可以修饰类:类是不能被继承的.
Final修饰方法:方法是不会被重写的.
Final修饰变量的时候,变量是不能再被赋值,也就是说变量是只读的
 
14.访问修饰符
       
        Private   默认(friedly)    protected    public
 本类       Y              Y           Y               Y
 同包       N              Y           Y               Y
 子类       N              N           Y               Y
其他包非子类N              N            N               Y


总结:  java的三大特性,继承,多态,封装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值