继承是一种面向对象编程的基本概念,它允许一个类从另一个类中继承属性和方法。这样,子类就可以从超类中获得所有的功能,而不必重新定义它们。
在面向对象的语言中,通常使用“extends”关键字来表明一个类是另一个类的子类。例如,如果你想要创建一个新的子类(例如“Dog”),你可以使用“extends Animal”来表明它是Animal的子类。这意味着Dog将会从Animal中获得所有的属性和方法。
当你创建一个新的子类时,你可以选择覆盖或重写超类中已存在的方法。这意味着你可以使用相同的方法名来定义新方法,并覆盖原始方法。这样就可以在不改变原始代码的情况下修改或更新功能。
class Animal { public void move() { System.out.println("Animals can move"); } } class Dog extends Animal { @Override // 覆盖了Animal中move()方法 public void move() { System.out.println("Dogs can walk and run"); } public void bark() { // 添加了bark()方法 System.out.println("Dogs can bark"); } }
跟变量和混合器不同,继承不是仅仅用css
样式替换@extend处的代码那么简单。为了不让你对生成的css
感觉奇怪,对这背后的工作原理有一定了解是非常重要的。
@extend
背后最基本的想法是,如果.seriousError @extend .error
, 那么样式表中的任何一处.error
都用.error
.seriousError
这一选择器组进行替换。这就意味着相关样式会如预期那样应用到.error
和.seriousError
。当.error
出现在复杂的选择器中,比如说h1.error
.error a
或者#main .sidebar input.error[type="text"]
,那情况就变得复杂多了,但是不用担心,sass
已经为你考虑到了这些。
关于@extend
有两个要点你应该知道。
css
代码相对更少。因为继承仅仅是重复选择器,而不会重复属性,所以使用继承往往比混合器生成的css
体积更小。如果你非常关心你站点的速度,请牢记这一点。css
层叠的规则。当两个不同的css
规则应用到同一个html
元素上时,并且这两个不同的css
规则对同一属性的修饰存在不同的值,css
层叠规则会决定应用哪个样式。相当直观:通常权重更高的选择器胜出,如果权重相同,定义在后边的规则胜出。混合器本身不会引起css
层叠的问题,因为混合器把样式直接放到了css
规则中,而继承存在样式层叠的问题。被继承的样式会保持原有定义位置和选择器权重不变。通常来说这并不会引起什么问题,但是知道这点总没有坏处。
什么是SASS?SASS(Syntactically Awesome Stylesheet)是一个CSS预处理器,有助于减少CSS的重复,节省时间。它是更稳定和强大的...
描述变量和mixin在分离的规则集中定义。例子下面的例子演示了在LESS文件中规则集中定义的变量和mixin的使用:passing_ruleset.ht...
描述默认函数仅在保护条件内可用时返回true,并且与任何其他mixin不匹配,否则返回false。 当默认函数在mixin guard条件之外使用...