2021-05-25

Java多态和Scala多态的区别

1.要彻底明白多态的区别,两种语言的继承先要搞清楚

1)Java的继承:
修饰符 class 子类 extends 父类名 { 类体 }1)在进行继承的时候,子类会继承父类的所有结构(包括私有属性、构造方法、普通方法)
	- 显示继承:所有非私有操作属于显示继承(可以直接调用)。
	- 隐式继承:所有私有操作属于隐式继承(不可以直接调用,需要通过其它形式调用(get或者set))。
(2Java是单继承
(3)子类对象在进行实例化前首先调用父类构造方法,再调用子类构造方法实例化子类对象

2)Scala的继承:
class 子类名 extends 父类名  { 类体 }1)子类继承父类的属性和方法(方法和属性都可被重写)
(2)scala是单继承
(3)继承的调用顺序:父类构造器->子类构造器

3)区别:Scala可以重写继承的属性
abstract class Person() {
  //定义抽象的属性
  val name: String
  var age: Int

  //定义非抽象的属性
  val name1: String = "person"
  var age1 = 16

  //定义抽象方法
  def sayHi()

  //定义非抽象方法
  def sayHi1() = {
    println("hello")
  }



}


class Emp() extends Person() {

  //重写抽象的属性
  override val name: String = "抽象属性"

  override var age: Int = 28

  //重写非抽象的属性
  override val name1: String = "非抽象属性"
  //非抽象中var不可重写,因为var修饰的为可变变量,子类继承之后就可以直接使用,没有必要重写
  //override var age : Int = 18
  age1 = 18

  //重写抽象的方法
  override def sayHi(): Unit = println("抽象方法")

  //重写非抽象的方法
  override def sayHi1(): Unit = println("非抽象方法")
}

object Test {
  def main(args: Array[String]): Unit = {
    val emp = new Emp()
    println(emp.name)
    println(emp.age)
    println(emp.name1)
    println(emp.age1)
    emp.sayHi()
    emp.sayHi1()


  }
}

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-caf1aruH-1621919235881)(assets/1621906904900.png)]

2.多态

1)Java
1.向上转型:
        1.有继承
        2.有方法重写
        3.父类的引用指向子类的对象(实例)
    
向上转型 对象能够调用的资源 分为 运行时 与 编译时:
         编译看左边    参照物是 =   运行看右边 
         编译时  =  运行时
         编译时:    写完代码后
         运行时:    代码执行时
         
2.向下转型:
        前提: 先向上转型
       	将变为父亲的孩子 再变回孩子
小的数据类型  变量名 = (小的数据类型)大的数据类型的值;

3.判断左边的变量是否属于右边的类型
instance Of
2)Scala
1.语法和java一样,两种语言有完美的兼容性

2.类型检查和转换的关键字不同

(1)obj.isInstanceOf[T]:判断obj是不是T类型。
(2)obj.asInstanceOf[T]:将obj强转成T类型。

3)区别:在继承的属性上Scala中属性和方法都是动态绑定,而Java中只有方法为动态绑定

Scala:

class Person {
    val name: String = "person"

    def hello(): Unit = {
        println("hello person")
    }
}

class Teacher extends Person {

    override val name: String = "teacher"

    override def hello(): Unit = {
        println("hello teacher")
    }
}

object Test {
    def main(args: Array[String]): Unit = {
        val teacher: Teacher = new Teacher()
        println(teacher.name)
        teacher.hello()
		
        //多态:父类的引用指向子类的实例
        val teacher1:Person = new Teacher
        println(teacher1.name)
        teacher1.hello()
    }
}

java:

class Person {

    public String name = "person";
    public void hello() {
        System.out.println("hello person");
    }

}
class Teacher extends Person {

public String name = "teacher";

    @Override
    public void hello() {
        System.out.println("hello teacher");
    }

}
public class TestDynamic {
public static void main(String[] args) {

        Teacher teacher = new Teacher();   
        System.out.println(teacher.name);
        teacher.hello();
    	
    	//多态
    	Person teacher1 = new Teacher();
        System.out.println(teacher1.name);
        teacher1.hello();
    }
}

结果对比:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUlTqOUl-1621919235883)(assets/1621907153497.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值