首页 > 其他分享 >5.9

5.9

时间:2024-06-14 21:11:59浏览次数:18  
标签:Java name Python 5.9 Animal public speak

今天继续进行python实验,学习到了python与java在类的定义、继承、多态等方面的异同。

复制代码
Python和Java都是面向对象的编程语言,它们在类的定义、继承、多态等方面有相似之处,但也存在一些显著差异。下面通过具体例子来比较这两种语言在面向对象编程上的异同,并总结Python面向对象编程的一些原则和注意事项。

类的定义

Python 示例:

1class Animal:
2    def __init__(self, name):
3        self.name = name
4
5    def speak(self):
6        pass
7
8class Dog(Animal):
9    def speak(self):
10        return self.name + " says Woof!"
11
12dog = Dog("Rex")
13print(dog.speak())  # 输出: Rex says Woof!

Java 示例:

1public class Animal {
2    private String name;
3
4    public Animal(String name) {
5        this.name = name;
6    }
7
8    public void speak() {
9    }
10}
11
12public class Dog extends Animal {
13    public Dog(String name) {
14        super(name);
15    }
16
17    @Override
18    public void speak() {
19        System.out.println(this.name + " says Woof!");
20    }
21}
22
23public class Main {
24    public static void main(String[] args) {
25        Dog dog = new Dog("Rex");
26        dog.speak();  // 输出: Rex says Woof!
27    }
28}

异同分析:

相同点: 都使用关键字class定义类,支持构造函数(Python中为__init__,Java中直接与类名同名),并可以通过继承父类来复用代码。

不同点: Python中方法定义不需要返回类型声明,也没有访问修饰符(如Java中的public、private)。Java中则需要明确指定方法的返回类型,并且鼓励使用访问修饰符来控制成员的可见性。

继承

异同分析:

相同点: 都支持单继承或多继承(Python支持多重继承,Java通过接口实现类似功能)。

不同点: 在Java中,一个类只能继承一个父类,但可以通过实现多个接口来达到类似多继承的效果。Python则直接支持一个类继承多个类。

多态

Python 示例:

1class Cat(Animal):
2    def speak(self):
3        return self.name + " says Meow!"
4
5animals = [Dog("Rex"), Cat("Whiskers")]
6
7for animal in animals:
8    print(animal.speak())

Java 示例:

1public class Cat extends Animal {
2    public Cat(String name) {
3        super(name);
4    }
5
6    @Override
7    public void speak() {
8        System.out.println(this.name + " says Meow!");
9    }
10}
11
12// 在Main类的main方法中添加Cat对象并遍历调用speak方法

异同点:

相同点: 都支持方法的重写(Python中的override,Java中的@Override注解),实现多态。

不同点: 语法上略有不同,但核心概念一致,即子类可以重写父类的方法,使得在运行时能够根据对象的实际类型来调用相应的方法。

Python面向对象编程原则和注意事项

简洁性: Python鼓励简明的代码风格,尽量使用清晰的命名和简洁的逻辑结构。

鸭子类型: Python是动态类型语言,更多依赖于“如果看起来像鸭子,叫声像鸭子,那么它就是鸭子”的理念,而不是严格的类型检查。

避免过早优化: 初期应关注代码的可读性和可维护性,而不是过度优化性能。

使用@property装饰器: 对于类的属性访问,推荐使用@property装饰器来定义getter和setter,这样可以保持代码的整洁和Pythonic。

异常处理: 适当使用异常处理来增强程序的健壮性,Python中使用try-except语句。

模块化和包: 利用Python的模块和包系统组织代码,提高代码的重用性和可管理性。

综上所述,Python与Java在面向对象编程的核心概念上是相似的,但在语法风格、动态静态类型、以及某些特定功能(如多重继承)上有各自的特点。Python编程时应注重代码的简洁性和易读性,同时利用其动态语言的特性来灵活设计类和实现多态。
复制代码

标签:Java,name,Python,5.9,Animal,public,speak
From: https://www.cnblogs.com/gjsgjs/p/18248642

相关文章

  • 5.9
    今日学习情况总结与小组成员讨论如何完成作业的主页面的xml页面代码行量:129行学习所花时间:0.5h  <?xmlversion="1.0"encoding="utf-8"?><androidx.drawerlayout.widget.DrawerLayoutxmlns:tools="http://schemas.android.com/tools"xmlns:android="http://sche......
  • 5.9
    中文级菜单(python)编写程序实现中文级联菜单,建议可以使用pypinyin或其它扩展库。importtkinterastkfromtkinterimportttkfrompypinyinimportlazy_pinyin#省份、城市、地区数据data={"北京":{"北京市":["东城区","西城区","朝阳区"]......
  • etcd-v3.5.9源代码分析
    Github上下载etcdv3.5.9源代码,包含server和client两部分。先放ETCDv3读写流程图镇楼读流程写流程EtcdServerserver->etcdmain->main.go:Main():startEtcdOrProxyV2()->etcd.go:startEtcd()->StartEtcd()->etcdserver目录下server.go:NewServer()初始化该节点为follow,......
  • 2024.5.9(周四)总结
    【题目描述】1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。【练习要求】请给出源......
  • 5.9~5.25 测试总结
    5.25Codeforces1863(PinelyRound2(Div1+2)VP)result:只过了前四道,E死也没调出来。明显是急了啊。今天晚上还要打一场,注意:别急,越急越调不出来,注意多测的清空,注意部分小细节的写法。1863E前面先DP最早的完成时间(看到DAG上这种问题大概应该直接想到DP吧)(本题中......
  • MathType7.5.9中文安装包破解激活图文详细教程
     MathType2024是一款最新发布的专业数学公式编辑软件,它以其卓越的功能和强大的性能在业界引起了广泛关注。这款软件不仅能够帮助用户轻松地创建和编辑复杂的数学公式,还能够与各种流行的文档处理软件无缝集成,极大地提高了用户的工作效率和准确性。让我们来看一下MathType2024......
  • 5.9
    Fitbit.NET是一个开源库,它使得.NET开发人员可以轻松地与FitbitAPI进行交互。通过使用这个库,你可以访问和管理用户的健康、运动和睡眠数据,从而构建出各种健身追踪器应用。应用场景健康数据分析:获取用户的步数、心率等数据,并进行统计分析。自定义通知:根据用户的运动或睡眠目......
  • 5.9-15护网常考漏洞
    1、中间件漏洞态势感知(SA):situationawareness2、常见软件服务漏洞shiro550和721漏洞区别;java框架,4a认证,认证授权会话加密。登录后有个rememberme选项,记住会话,验证时先看rememberme选项是否勾选;若勾选,将用户身份序列化,再AES加密,之后base64编码;之后将处理好的内容,放入c......
  • 5.9
    开始学习jetpackcomposeclassMainActivity:ComponentActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContent{BasicsCodelabTheme{//Asurfacecontaine......
  • 5.9洛谷收获
    今天发现了一个有用的容器,那就是向量,用bool类型的向量简直不要太方便,尤其是对于二极管问题,比如B2094然后用向量模拟栈也比较方便点击查看代码#include<iostream>#include<vector>usingnamespacestd;classStack{private:vector<int>elements;public://......