【学习笔记】java面向对象高级编程1

内容包含:

/************************
封装
继承以及使用继承所带来的问题剖析
变量隐藏与方法重写

*************************/

一. 封装

通过get和set进行封装

这里面有个小技巧:通过快捷键 Alt + Shift + 3 进行选择一些快速高效的方法,选择get和set进行快速创建,如下代码:

package com.jfu.one;

public class packAge {
    private int dog;
    private String cat;

    public int getDog() {
        return dog;
    }
    public void setDog(int dog) {
        this.dog = dog;
    }

    public String getCat() {
        return cat;
    }
    public void setCat(String cat) {
        this.cat = cat;
    }

    public static void main(String[] args){

    }
}

二. 继承

作用:通过继承可以实现代码的复用。

java不支持多继承.

子类可继承父类的变量和方法, 除了private.

通过在类的声明中加入extends子句来创建一个类的子类:

class SubClass extends SuperClass(){
    }

举例如下:

Car为父类, SmallCar为子类继承Car, 而BMW继承SmallCar

Car.java

package Carry;

public class Car {
    int price;
    private String color;
    public static void print(){
        System.out.println("父类Car");
    }
}

SmallCar.java

package Carry;

public class SmallCar extends Car {

    void smallcar(){
        System.out.println("这个一个小车子类");
    }

    public static void main(String[] args){
        SmallCar smallcar = new SmallCar();
        smallcar.print();
    }
}

BMW.java

package Carry;

public class BMW extends SmallCar{
    public static void main(String[] args){
        BMW bmw = new BMW();
        bmw.print();
        bmw.smallcar();
    }
}

运行BMW.java, 得出的结果:

父类Car
这个一个小车子类

结果分析:

在BMW.java中, 这个类, 继承了SmallCar类, 而SmallCar类又继承于Car类, 所以BMW类可以使用SmallCar类和Car的属性和方法.

三. 继承中的变量隐藏及方法重载原则

变量隐藏原则:

子类中变量名与继承自父类的变量名相同时, 则继承自父类的变量将隐藏.

方法重写原则:

1. 必须要有继承关系

2. 重写后的方法不能比被重写的方法有更严格的访问权限, 可以相同.

3. 改写后的重在方法不可以比重载的方法产生更多的例外(异常).

4. 返回值, 方法名, 方法的参数个数必须与父类一致. (也就是说, 仅仅修改了里面的内容, 其他的不能改变!)

Animal.java

package OverWrite;

public class Animal {
    public void back(){
        System.out.println("动物在说话");
    }
}

Dog.java

package OverWrite;

public class Dog extends Animal {

    //方法重写
    public void back(){
        System.out.println("狗在说话");
    }

    public static void main(String[] args){
        Dog dog = new Dog();
        dog.back();
    }
}

执行结果:

狗在说话
时间: 2024-08-06 06:16:08

【学习笔记】java面向对象高级编程1的相关文章

Python学习笔记八 面向对象高级编程(二)元类

参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 在廖老师的学习网站里"使用元类"这部分还是把我给看晕了...网上搜到一篇感觉讲的相对易懂一些,贴出链接:两句话掌握 Python 最难知识点--元类--以此文作为这篇笔记的源本. "道生一,一生二,二生三,三生万物" 1.在Python世界中,"type"即为道

python学习笔记(七) - 面向对象高级编程

一. 为类动态添加属性和方法: 1. 动态给一个实例添加属性和方法: 给一个实例绑定的方法,对另一个实例是不起作用的. class Student(object): pass s = Student() s.name = 'Michael' # 动态给实例绑定一个属性 print s.name def set_age(self, age): # 定义一个函数作为实例方法 self.age = age from types import MethodType s.set_age = MethodT

Python学习笔记八 面向对象高级编程(一)

参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一.使用__slots__ 正常情况下,当定义了一个类之后,我们可以给这个类的实例绑定任何属性,这就是动态语言的优势: class Student(object): def __init__(self,name,age): self.name=name self.age=age bob=Student('Bob

Python学习笔记捌——面向对象高级编程

__slots__特殊变量的使用: 由于Python是动态语言,允许先编写类,然后在创建实例的时候添加属性或者方法:而__slots__特殊变量就是,限制往类里添加属性的: 在创建类的时候,使用__slots__ =('name','age'),就是在创建实例时候,只允许添加绑定name和age两个属性:注意!__slots__只对当前类有效,不会作用于子类: @property装饰器:为了实现数据的封装,不把属性暴露在外面,所以如果想访问实例内部属性的话,就需要使用get和set方法,但是这样

Python笔记7#面向对象高级编程二

▲定制类 Python中有许多类似__slots__这样有特殊用途的函数,可以帮助我们定制类. 官方文档链接:https://docs.python.org/3.4/reference/datamodel.html#special-method-names 1)__str__和__repr__ 示例代码如下: >>> class Student(object): ... def __init__(self, name): ... self.name = name ... >>

【Python学习之七】面向对象高级编程——__slots__的使用

1.Python中的属性和方法的绑定 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法. (1)首先,定义一个class:  class Student(object):  pass (2)然后,给实例绑定属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 >>> print(s.name) Michael (3)或者,给实例绑定一

day10_python学习笔记_chapter13_面向对象编程

1. class NewClass(parent): def .... 如果没有父类, 则默认继承object类 2. 类属性访问(类似java中的静态属性和方法)直接用类名.属性名, 在python中, 如果没有创建实例, 方法不能被调用.方法必须绑定到一个实例才能直接被调用. class C(object): foo = 100 访问 C.foo 3. 特殊的类属性: C.__name__, C.__doc__ , C.__bases__, C.__dict__ , C.__module__

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g