首页 > 其他 > 详细

面向对象的学习

时间:2021-04-13 16:48:50      阅读:25      评论:0      收藏:0      [点我收藏+]

Java面向对象编程(oop)

  • 面向过程思想:
  1. 步骤清晰简单
  2. 面对过程适合处理一些较为简单的问题
  • 面向对象思想:
  1. 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考.最后才对某个分类下的细节进行面向过程的思索
  2. 面向对象适合处理复杂的问题,适合处理多人协作的问题.
  • 本质:以类的方式组织代码,以对象的形式封装数据

三大特性:

  1. 封装
  2. 继承
  3. 多态

方法回顾与加深

修饰符 返回值类型 方法名(参数){

? 方法体

return;

}

  • 如果方法定义的返回值类型是void,不写return或者return;(返回空值)

方法调用

  • 静态方法:加了static
  • 非静态方法:将类实例化
//对象类型 对象名字 = 对象值(//new 对象类型()//);
例如:
Student student = new Student();
    student.say();
  • 形参和实参

  • 值传递和引用传递

  • this关键词

类与对象的关系

创建与初始化对象

创建:属性+方法

类是抽象的,需要实例化new

Student student = new Student();

类实例化后会返回一个自己的对象

构造器的详解

  1. 必须和类的名字相同
  2. 必须没有返回类型,也不能写void
  3. 使用new关键字,本质是调用构造器
  4. 使用new构造词用来初始化值
//无参构造
public Person(){
    
}
//有参构造
public Person(String name){
    
}

一旦定义有了有参构造,无参就必须显示定义

快捷键 alt+insert

类与对象的小结

  1. 类是一个模板,对象是一个具体的实例

  2. 对象的引用:

    ? 引用类型:基本类型(8)

    ? 对象是通过引用来操作的:栈------>堆

  3. 属性:字段field 成员变量

  4. 默认初始化

  5. 定义:修饰符 属性类型 属性名 = 属性值!

  6. 对象的创建和使用:

    1. 必须使用new关键字创造对象,构造器 例如:Person jiajia = new Person();
    2. 对象的属性 例如:jiajia.name
    3. 对象的方法 例如:jiajia.sleep
  7. 类:

    1. 静态的属性:属性
    2. 动态的行为:方法

封装

属性私有,get/set

//main文件
import duiXiang.fengZhuang;

public class main {
    public static void main(String[] args) {
        fengZhuang s1 = new fengZhuang();
         s1.setName("李文丽");
        System.out.println(s1.getName());
    }
}

//封装文件
package duiXiang;

public class fengZhuang {
    //属性私有
    //private 私有
    private String name;
    private int xuehao;
    private char sex;
    //提供一些可以操作这些属性的方法
    //提供一些public的get、set的方法
    //通过get获得这个数据
    public String getName(){
        return this.name;
    }
    //通过setName设定值
    public void setName(String name){
        this.name = name;

    }
}

快捷键:alt+insert

继承

  • 堆某一批类的抽象
  • extends意思是"扩展"子类是父类的拓展
  • 继承是类与类之间的关系.
  • 子类继承父类的所有方法,修饰符必须用public
  • Java中只有单继承没有多继承//只能有一个父类,可以有多个子类
package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
 * default默认的
* private私有的
* */
public class person {
    public int money = 100000;
    public void test(){
        System.out.println("我是爸爸");
    }
}


package duiXiang.jiCheng;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

//students:派生类
public class students extends person{
    /*public void test(){
        //System.out.println("我是儿子");
    }*/
}

//main类
import duiXiang.fengZhuang;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;

public class main {
    public static void main(String[] args) {
        /*fengZhuang s1 = new fengZhuang();
         s1.setName("李文丽");
        System.out.println(s1.getName());
        s1.setXuehao(190875129);
        System.out.println(s1.getXuehao());
        s1.setSex(‘男‘);
        System.out.println(s1.getSex());*/
        students s1 = new students();
        s1.test();
        System.out.println(s1.money);//继承了父类的属性

    }
}
输出结果:

我是爸爸
100000

Process finished with exit code 0

super详解

调用父类的属性

调用父类的构造器必须在子类的构造器的第一行

super必须只能出现在子类的方法或者构造方法中

super和this不能同时调用构造方法

//main类
import duiXiang.fengZhuang;
import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;

public class main {
    public static void main(String[] args) {
        /*fengZhuang s1 = new fengZhuang();
         s1.setName("李文丽");
        System.out.println(s1.getName());
        s1.setXuehao(190875129);
        System.out.println(s1.getXuehao());
        s1.setSex(‘男‘);
        System.out.println(s1.getSex());*/
        students s1 = new students();
        s1.test("靳若嘉");
        //s1.test(s1.name);
        //System.out.println(s1.money);//继承了父类的属性

    }
}

package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
 * default默认的
* private私有的
* */
public class person {
    public String name = "jinruojia";

}

package duiXiang.jiCheng;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

//students:派生类
public class students extends person{
    public String name = "liwenli";
    public void test(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}

方法的重写@override

  1. 只能在public的定义下重写

  2. 需要有继承关系,并且是子类重写父类的方法

  3. 方法名必须相同

  4. 参数列表都要必须相同
    5. 抛出的异常:可以被缩小但是不能扩大

子类的方法和父类的方法必须相同,方法体可以不同

为什么需要重写

父类的功能子类不一定需要或者不一定满足

多态

package duiXiang.duoTai;

import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;

public class duoTaiDemo01 {
    //一个对象的实际类型是确定的,可以指向的以用类型不确定:父类的引用指向子类
    public static void main(String[] args) {
        //students是子类:能够调用的方法只有自己的或者继承父类的
        students s1 = new students();
        //person是父类:可以指向子类,但是不能调用子类独有的方法
        person s2 = new students();
        Object s3 = new students();
        //只有子类重写父类的方法后,执行子类的方法
        s1.run();
        s2.run();
        ((students) s2).eat();//强制转换
        s1.eat();
    }
}
/*
* 1.多态是方法的多态,属性没有多态
* 2.父类和子类要有联系,会有类型转换异常ClassCastException
* 3.存在的条件:
*   1.要有继承关系
*   2.方法需要重写
*   3.父类的引用指向子类对象
* 4.static方法不能重写
* 5.被final修饰的不能重写
* 6.通过private修饰的方法不能重写
* */
package duiXiang.jiCheng;
//person:父类
//在Java中所有的类都继承在object类下
/*
* 子类继承父类的所有方法(修饰符为public)
* public公共的
* protected受保护的
 * default默认的
* private私有的
* */
public class person {
    public String name = "jinruojia";
    public void run(){
        System.out.println("pao");
    }
}

package duiXiang.jiCheng;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

//students:派生类
public class students extends person{
    public void eat(){
        System.out.println("eat");
        //子类可以直接继承父类的方法
       /* person r1 = new person();
        r1.run();*/
    }

    @Override
    public void run() {
        System.out.println("zou");
    }
}

instanceof类型转换:引用类型转换

package duiXiang.duoTai;

import duiXiang.jiCheng.person;
import duiXiang.jiCheng.students;
import duiXiang.jiCheng.teacher;

public class duoTaiDemo01 {

    public static void main(String[] args) {
       
        //类型之间的转化: 父     子
        //子类转换成父类可能丢失原本的一些方法
        //高               低
        person s1 = new students();
        //转换
        ((students)s1).go();
        //或者
        students students = (students) s1;
        students.go();
        /*
         * 1.父类引用指向子类的对象
         * 2.把子类转换为父类,向上转型
         * 3.把父类转换成子类,向下转型:强制转换
         * */
        
    }
}
package duiXiang.jiCheng;

public class person {

    public void run(){
        System.out.println("pao");
    }
}
package duiXiang.jiCheng;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

//students:派生类
public class students extends person{
    public void go(){
        System.out.println("go");
    }



}

面向对象的学习

原文:https://www.cnblogs.com/jrj-share/p/14652423.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!